2017-01-18 5 views
1

Я должен извлечь данные из firebase и использовать их в графике. Я использую библиотеку для графика.Извлечь данные из Firebase в ArrayList для графа

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

One or more of the DataSet Entry arrays are longer than the x-values array of this ChartData object.

детали в 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

Было бы полезно, если бы вы могли сказать нам, какие рамки или библиотеки вы используете для создания диаграмм.

Угадайте сообщение об ошибке Я предполагаю, что проблема не связана с Firebase, но лежит в вашем использовании Chart API. В вашем примере у вас есть 2 элемента в списке ваших записей, но добавьте только один ярлык в список ярлыков. С другой стороны, API, похоже, ожидает одну метку для каждой записи, но это всего лишь предположение.

+0

Благодарим за ответ! Я решаю это. я редактирую свой вопрос с помощью нового кода – hulon

Смежные вопросы