Как установить метки на xAxis внутри линейного графика Mpandroidchart? - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь поставить метку на xAxis внутри mpandroidchart в линейном графике, но каждый раз получаю сообщение об ошибке.

Где я ошибся?

Или я должен следовать другому подходу?

Если мне нужно, то что это?

 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 Ответ

0 голосов
/ 08 октября 2019

Проблема в том, что ваш размер записи1, записи2 и xValues ​​не одинаковы. Вам необходимо установить точку останова в следующей строке:

xAxis.setCenterAxisLabels(true);

На этом этапе проверьте, все ли три списка равны по размеру. После этого вам нужно отладить, где конфликт, а затем обработать случай, добавив значение 0 или пустую строку, если есть что-то null, которое вы получаете. Но размер всех трех массивов должен быть одинаковым для работы.

...