通过改造从数据库中获取 xAxis mpchart android

get xAxis mpchart android from database with retrofit

我想从数据库中获取 xAxis,它是不同查询的结果,因此我的图表可以动态显示数据。

对于静态 mpchart 我没有问题。我在onCreate中调用了这个函数。

private void drawChart(){
    getChartData();
    BarDataSet barDataSet1 = new BarDataSet(sehat(), "Sehat");
    BarDataSet barDataSet2 = new BarDataSet(sakit(), "Sakit");
    barDataSet1.setColor(Color.BLUE);
    barDataSet2.setColor(Color.RED);

    chart.getXAxis().setDrawGridLines(false);
    chart.getAxisLeft().setDrawGridLines(false);
    chart.getDescription().setEnabled(false);

    BarData barData = new BarData(barDataSet1, barDataSet2);
    chart.setData(barData);

    String[] area = new String[]{"UT PBRK", "POOL SLI", "UT TJR", "UT TRD", "UTR BATAKAN", "UT PBLP", "UT PBPN"};
    XAxis xAxis = chart.getXAxis();
    xAxis.setValueFormatter(new IndexAxisValueFormatter(area));
    xAxis.setCenterAxisLabels(true);
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setGranularity(1);
    xAxis.setGranularityEnabled(true);

    chart.setDragEnabled(true);
    chart.setVisibleXRangeMaximum(3);

    float barSpace = 0.08f;
    float groupSpace = 0.54f;
    barData.setBarWidth(0.15f);

    chart.getXAxis().setAxisMinimum(0);
    chart.getXAxis().setAxisMaximum(0+chart.getBarData().getGroupWidth(groupSpace, barSpace)*7);
    chart.getAxisLeft().setAxisMinimum(0);

    chart.groupBars(0, groupSpace, barSpace);

    chart.invalidate();
}

private ArrayList<BarEntry> sakit() {
        ArrayList<BarEntry> dataEntries = new ArrayList<>();
        dataEntries.add(new BarEntry(1, 2));
        dataEntries.add(new BarEntry(2, 1));
        dataEntries.add(new BarEntry(3, 1));
        dataEntries.add(new BarEntry(4, 4));
        dataEntries.add(new BarEntry(5, 3));
        dataEntries.add(new BarEntry(6, 7));
        dataEntries.add(new BarEntry(7, 7));

        return dataEntries;
    }

    private ArrayList<BarEntry> sehat() {
        ArrayList<BarEntry> dataEntries = new ArrayList<>();
        dataEntries.add(new BarEntry(1, 10));
        dataEntries.add(new BarEntry(2, 6));
        dataEntries.add(new BarEntry(3, 8));
        dataEntries.add(new BarEntry(4, 5));
        dataEntries.add(new BarEntry(5, 3));
        dataEntries.add(new BarEntry(6, 2));
        dataEntries.add(new BarEntry(7, 2));

        return dataEntries;
    }

这行我要动态化。

String[] area = new String[]{"UT PBRK", "POOL SLI", "UT TJR", "UT TRD", "UTR BATAKAN", "UT PBLP", "UT PBPN"};

到目前为止,我已经尝试了一些我在 google 中发现的实验。这个更近了。 Log.d 显示结果数据。但是当我使用 String[] 时,它没有显示在我的图表中。

public void getChartData(){
    Call<List<Data>> call = userService.getDataArea();
    call.enqueue(new Callback<List<Data>>() {
        @Override
        public void onResponse(Call<List<Data>> call, Response<List<Data>> response) {
            if(response.isSuccessful()){
                List<Data> data = response.body();
                for(Data get : data){
                    Log.d("testing", get.getArea());
                    area = new String[]{get.getArea()};
                }
            }
        }

        @Override
        public void onFailure(Call<List<Data>> call, Throwable t) {

        }
    });
}

这是我的json

[{
"area": "BP BLP \/ BPN"
}, {
    "area": "AMK CPBP"
}, {
    "area": "BP CPBP"
}, {
    "area": "BP TJR"
}, {
    "area": "UT PBIN"
}, {
    "area": "UT PBIB"
}, {
    "area": "UT PBLN"
}, {
    "area": "UT PBPN"
}, {
    "area": "UT HUB BPN"
}, {
    "area": "UT PLTI"
}, {
    "area": "SELOG BPN OFFICE"
}, {
    "area": "UTR SUDIRMAN"
}, {
    "area": "RBPC"
}, {
    "area": "RBPF"
}, {
    "area": "RBPM"
}, {
    "area": "RBPS"
}, {
    "area": "SAMBARATA"
}, {
    "area": "TJR DEPO"
}, {
    "area": "TJR SELF"
}, {
    "area": "TRANSPORT"
}, {
    "area": "UT BLP -SELF"
}, {
    "area": "UT BRK"
}, {
    "area": "DEPO TAM"
}, {
    "area": "POLL SLI"
}, {
    "area": "KRA MP"
}, {
    "area": "UT PTRD"
}, {
    "area": "UT PSBT"
}, {
    "area": "KRA BP"
}, {
    "area": "UTR BATAKAN"
}, {
    "area": "UT PBLP"
}, {
    "area": "Administrator"
}]

感谢任何帮助

仔细看下面的代码

for(Data get : data){
 Log.d("testing", get.getArea());
 area = new String[]{get.getArea()};
 }

area = new String[]{get.getArea()}; for 循环中的方法,所以每次更新区域变量都是正确的,所以你最终在区域变量中只有一个值,所以请按照下面提到的代码进行更改

Int i = 0;
String[] area = new String[data.size()];
for(Data get : data){
  Log.d("testing", get.getArea());
  area[i] = get.getArea();
   i++;
  }

希望对你有帮助谢谢