通过改造从数据库中获取 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++;
}
希望对你有帮助谢谢
我想从数据库中获取 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++;
}
希望对你有帮助谢谢