如何在 Mpandroidchart 折线图中的 xAxis 上设置标签?



我试图在折线图中的 mpandroidchart 内的 xAxis 上给出标签,但每次都出错。

我哪里做错了?

还是我应该遵循另一种方法?

如果我必须这样做,那是什么?

public class OpdIpdAnalysis extends AppCompatActivity{
ApiService service;
TokenManager tokenManager;
Call<ModelResponse> call;
private ListView mListView;
//GraphView
private LineChart mLineChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opd_ipd_analysis);

//GraphView casting
mLineChart =(LineChart) findViewById(R.id.lineChart);
mLineChart.setTouchEnabled(true);
mLineChart.setPinchZoom(true);
//code for retrofit call
call = service.getAllOpdIpdData();
call.enqueue(new Callback<ModelResponse>() {
@Override
public void onResponse(Call<ModelResponse> call, Response<ModelResponse> response) {
myProgressBar.setVisibility(View.GONE);
if (response.isSuccessful() && response.body() != null) {
updatUI(response.body().getOpdIpdComparison());
List<Entry> entries1 = new ArrayList<>();
List<Entry> entries2 = new ArrayList<>();
//final List<String> xLabel = new ArrayList<>();
for (OpdIpdModel opdIpdModel : response.body().getOpdIpdComparison()){
entries1.add(new Entry(opdIpdModel.getMonth(),opdIpdModel.getoPD()));
entries2.add(new Entry(opdIpdModel.getMonth(), opdIpdModel.getiPD()));
//xLabel.add(opdIpdModel.getMonthString());
String[] xLabel = {opdIpdModel.getMonthString()};
XAxis xAxis = mLineChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
xAxis.setGranularity(1);
xAxis.setAxisMinimum(1);
xAxis.setCenterAxisLabels(true);
xAxis.setValueFormatter(new MyXAxisValueFormatter(xLabel));
}
LineDataSet lineDataSet1 = new LineDataSet(entries1, "OpdLine");
lineDataSet1.setDrawCircles(false);
lineDataSet1.setLineWidth(4f);
lineDataSet1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
lineDataSet1.setColor(randomAndroidColor1);
LineDataSet lineDataSet2 = new LineDataSet(entries2, "IpdLine");
lineDataSet2.setDrawCircles(false);
lineDataSet2.setLineWidth(4f);
lineDataSet2.setMode(LineDataSet.Mode.CUBIC_BEZIER);
lineDataSet2.setColor(randomAndroidColor2);
//add the data
List<ILineDataSet> iLineDataSets = new ArrayList<>();
iLineDataSets.add(lineDataSet1);
iLineDataSets.add(lineDataSet2);
LineData lineData = new LineData(iLineDataSets);
mLineChart.setData(lineData);
mLineChart.setVisibility(View.VISIBLE);
mLineChart.animateXY(1500,1500);
mLineChart.setVisibleXRangeMaximum(10);
//mLineChart.setXAxisRenderer(new CustomXAxisRenderer(mLineChart.getViewPortHandler(),mLineChart.getTransformer(YAxis.AxisDependency.LEFT)));
Description description = new Description();
description.setText("Growth rate per month");
description.setTextSize(12);
description.setTextColor(Color.BLACK);
mLineChart.setDescription(description);
mLineChart.invalidate();
}
}           
}

我的应用程序每次都崩溃。

我收到一个错误:

java.lang.ArrayIndexOutOfBoundsException: length=4; index=4

现在如何解决此问题并按预期设置标签?

问题是条目 1、条目 2 和 xValues 的大小不同。您需要在以下行上设置断点:

xAxis.setCenterAxisLabels(true);

此时,请检查所有三个列表的大小是否相等。之后,您需要调试冲突的位置,然后通过添加 0 值或空字符串来处理这种情况(如果您得到的东西为 null(。但是所有三个数组列表的大小应该相同才能工作。

最新更新