Я хочу получить 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;
}
}