我必须从firebase中检索数据,并将其用于图表中。我正在使用库来绘制图表。
我使用addValueEventListener来检索数据,它可以工作。 使用我的代码,应用程序崩溃时出现此错误:
一个或多个DataSet Entry数组比此ChartData对象的x值数组长。
firebase中的项目是2,而数组列表标签没有填充来自firebase的数据。我不知道自己的错误。
如何在arraylist中修复代码并连接数据?
DatabaseReference mPostReference = FirebaseDatabase.getInstance().getReference().child("user-specialita").child(getUid()).child(mPostKey).child("content");
mPostReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Specialita object and use the values to update the UI
Specialita_2 specialita = dataSnapshot.getValue(Specialita_2.class);
// [START_EXCLUDE]
LineChart lineChart = (LineChart) findViewById(R.id.chart);
ArrayList<Entry> entries = new ArrayList<>();
entries.add(new Entry(4f, 0));
entries.add(new Entry(8f, 1));
//entries.add(new Entry(6f, 2));
//entries.add(new Entry(2f, 3));
// entries.add(new Entry(18f, 4));
// entries.add(new Entry(9f, 5));
LineDataSet dataset = new LineDataSet(entries, "# of Calls");
ArrayList<String> labels = new ArrayList<String>();
labels.add(specialita.title);
LineData data = new LineData(labels, dataset);
dataset.setColors(ColorTemplate.COLORFUL_COLORS); //
dataset.setDrawCubic(true);
dataset.setDrawFilled(true);
lineChart.setData(data);
lineChart.animateY(5000);
Toast.makeText(Alpha.this,"success",
Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(DatabaseError firebaseError) {
}
});
使用解决方案进行编辑
DatabaseReference mPostReference = FirebaseDatabase.getInstance().getReference().child("user-specialita").child(getUid()).child(mPostKey).child("content");
mPostReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
LineChart lineChart = (LineChart) findViewById(R.id.chart);
ArrayList<Entry> entries = new ArrayList<>();
// entries.add(new Entry(4, 0));
// entries.add(new Entry(8f, 1));
//entries.add(new Entry(6f, 2));
//entries.add(new Entry(2f, 3));
// entries.add(new Entry(18f, 4));
// entries.add(new Entry(9f, 5));
LineDataSet dataset = new LineDataSet(entries, "# of Calls");
final ArrayList<String> labels = new ArrayList<String>();
labels.clear();
for (DataSnapshot data : dataSnapshot.getChildren()){
Specialita_2 specialita = data.getValue(Specialita_2.class);
labels.add(specialita.title);
}
LineData data = new LineData(labels, dataset);
dataset.setColors(ColorTemplate.COLORFUL_COLORS); //
dataset.setDrawCubic(true);
dataset.setDrawFilled(true);
lineChart.setData(data);
lineChart.animateY(5000);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Alpha.this,"error",
Toast.LENGTH_SHORT).show();
}
});
答案 0 :(得分:0)
如果您能告诉我们您使用哪个框架或库来创建图表,那将会很有帮助。
从错误消息中猜测我认为问题与Firebase无关,但在于您使用Chart API。在您的示例中,条目列表中有2个元素,但只向标签列表添加一个标签。另一方面,API似乎期望每个条目有一个标签,但这只是一个假设。