从ArrayList中的Firebase中返回数据以获取图形

时间:2017-01-18 12:28:49

标签: android arraylist firebase graph firebase-realtime-database

我必须从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();
        }
    });

1 个答案:

答案 0 :(得分:0)

如果您能告诉我们您使用哪个框架或库来创建图表,那将会很有帮助。

从错误消息中猜测我认为问题与Firebase无关,但在于您使用Chart API。在您的示例中,条目列表中有2个元素,但只向标签列表添加一个标签。另一方面,API似乎期望每个条目有一个标签,但这只是一个假设。