0
votes

I am trying to fill Line chart with data from Http call, I am getting everything right, except that sometimes data seems not yet be fully added to chart. Is there a way to get callback when data been added to chart?

my code :

        @Override
        public void onResponse(Call call, Response response) throws IOException {

            try {
                JSONObject jsonObj = new JSONObject(response.body().string());


                JSONArray price = jsonObj.getJSONArray("price");



                for(int I = 0;  I < price.length();  I++)
                {


                    JSONArray jArr = price.getJSONArray(I);
                    values.add(new Entry((float) jArr.getDouble(0), (float) jArr.getDouble(1)));


                    // create a dataset and give it a type
                    LineDataSet set1 = new LineDataSet(values, "DataSet 1");
                    set1.setAxisDependency(AxisDependency.LEFT);
                    set1.setColor(ColorTemplate.getHoloBlue());
                    set1.setValueTextColor(ColorTemplate.getHoloBlue());
                    set1.setLineWidth(1.5f);
                    set1.setDrawCircles(false);
                    set1.setDrawValues(false);
                    set1.setFillAlpha(65);
                    set1.setFillColor(ColorTemplate.getHoloBlue());
                    set1.setHighLightColor(Color.rgb(244, 117, 117));
                    set1.setDrawCircleHole(false);

                    set1.setDrawFilled(true);

                    // create a data object with the datasets
                 final LineData data = new LineData(set1);
                    data.setValueTextColor(Color.WHITE);
                    data.setValueTextSize(9f);
                    mChart.setData(data);



                }

            } catch (JSONException e) {
                e.printStackTrace();
            }


        }
    });
1

1 Answers

1
votes

The problem appears to be that you are constantly overwriting your dataset with a single point. You need to move the LineDataSet and LineData creation outside of the for loop.

    for(int I = 0;  I < price.length();  I++)
    {
        JSONArray jArr = price.getJSONArray(I);
        values.add(new Entry((float) jArr.getDouble(0), (float) jArr.getDouble(1)));
    }

    // create a dataset and give it a type
    LineDataSet set1 = new LineDataSet(values, "DataSet 1");
    set1.setAxisDependency(AxisDependency.LEFT);
    set1.setColor(ColorTemplate.getHoloBlue());
    set1.setValueTextColor(ColorTemplate.getHoloBlue());
    set1.setLineWidth(1.5f);
    set1.setDrawCircles(false);
    set1.setDrawValues(false);
    set1.setFillAlpha(65);
    set1.setFillColor(ColorTemplate.getHoloBlue());
    set1.setHighLightColor(Color.rgb(244, 117, 117));
    set1.setDrawCircleHole(false);

    set1.setDrawFilled(true);

    // create a data object with the datasets
    final LineData data = new LineData(set1);
    data.setValueTextColor(Color.WHITE);
    data.setValueTextSize(9f);
    mChart.setData(data);