Как найти пожарный магазин и вывести его на график - PullRequest
2 голосов
/ 04 апреля 2019

Я хочу получить firestore и вставить его в массив, затем вывести его на график.

Я пытался использовать этот код, и мое приложение всегда вылетало, я не вижу ошибку LOG, потому что я использую ноутбук1 ГБ ОЗУ для запуска Android Studio.

Сбой моего приложения при использовании этого кода:

ArrayList<Entry> entries = new ArrayList<>();
     for (int i = 0; i < x.length; i++)
         entries.add(new Entry(x[i], y[i]));

, но успешно, когда я изменяю этот код на:

ArrayList<Entry> entries = new ArrayList<>();
    entries.add(new Entry(1f, 10f));
    entries.add(new Entry(2f, 20f));
    entries.add(new Entry(3f, 30f));

так что из двух приведенных выше примеров я почти уверен, какая проблема возникла из-за моего запроса в магазине, но мне сложно понять, где я скучаю.Это весь мой код:

public class AnalyticCharts extends AppCompatActivity {

    private int[] x;
    private int[] y;

    private Button percobaan;

    private FirebaseAuth firebaseAuth;
    private FirebaseFirestore firestore;

    private CombinedChart combinedChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_charts);

        firebaseAuth = FirebaseAuth.getInstance();
        firestore = FirebaseFirestore.getInstance();

        combinedChart = findViewById(R.id.home_combined_chart);       

        if (firebaseAuth.getCurrentUser() != null) {
            insertChart();
        }
    }

    public void insertChart() {


        Query query = firestore
                .collection("DemandHistory")
                .orderBy("timestamp", Query.Direction.ASCENDING);

        query.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {

                if (queryDocumentSnapshots != null) {
                    int c = queryDocumentSnapshots.size();

                    x = new int[c];
                    y = new int[c];
                    int index = 0;
                    for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {

                        DemandHistory dem = doc.getDocument().toObject(DemandHistory.class);

                        x[index] = dem.getDay();
                        y[index] = dem.getSold();

                        index++;
                    }   


                combinedChart.setDrawOrder(new CombinedChart.DrawOrder[]{CombinedChart.DrawOrder.LINE,
                        CombinedChart.DrawOrder.SCATTER});

                YAxis leftAxis = combinedChart.getAxisLeft();
                //leftAxis.setDrawGridLines(false);
                leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)

                XAxis xAxis = combinedChart.getXAxis();
                xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
                xAxis.setAxisMinimum(0f);
                xAxis.setGranularity(1f);

                CombinedData data = new CombinedData();
                data.setData(generateLineData());
                data.setData(generateScatterData());
                combinedChart.setData(data);
                combinedChart.invalidate();


                }

            }
        });

    }

    private LineData generateLineData() {
        LineData d = new LineData();

        ArrayList<Entry> entries = new ArrayList<>();
        for (int i = 0; i < x.length; i++)
            entries.add(new Entry(x[i], y[i]));


        LineDataSet set = new LineDataSet(entries, "Indikator Kualitas Kecepatan");
        set.setColor(Color.rgb(49, 57, 66));
        set.setLineWidth(2.5f);
        set.setCircleColor(Color.rgb(49, 57, 66));
        set.setCircleRadius(3f);
        set.setFillColor(Color.rgb(49, 57, 66));
        //set.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        set.setDrawValues(true);
        //set.setValueTextSize(10f);
        //set.setValueTextColor(Color.rgb(240, 238, 70));
        //set.setAxisDependency(YAxis.AxisDependency.LEFT);
        d.addDataSet(set);
        return d;
    }

    private ScatterData generateScatterData() {
        ScatterData d = new ScatterData();

        ArrayList<Entry> entries = new ArrayList<>();
        for (int i = 0; i < x.length; i++)
            entries.add(new Entry(x[i], y[i]));


        ScatterDataSet set = new ScatterDataSet(entries, "Kehadiran vs Penjualan");
        set.setColors(Color.rgb(0, 156, 223));
        set.setScatterShapeSize(5f);
        set.setDrawValues(false);
        //set.setValueTextSize(10f);
        d.addDataSet(set);
        return d;
    }
}
...