首页 > 解决方案 > Android Studio,更改 MP BarChart 数据时应用程序崩溃

问题描述

我发现了多个具有类似问题的表格,但没有一个导致解决方案。

我正在尝试使用 MPlibrary 在 android 中创建一个 barChart 来显示每天的花费。我有两个按钮“每周按钮”:显示过去 7 天的费用(7 个图表条,7 个 X 轴标签)“每月按钮”:按季度显示过去一个月的费用(4 个图表条,4 个 X 轴标签)

只有一个条形图,上面的按钮更新条形图

两个按钮都可以正常工作,除了当我从“每周”按钮切换到“每月”按钮时应用程序崩溃。这是我的代码:

barChart = root.findViewById(R.id.barChart);
        BarDataSet barDataSet = new BarDataSet(expenseModelData.getExpenseBarEntries(), "Expenses($)");
        barDataSet.setValueTextColor(getResources().getColor(R.color.black));
        barDataSet.setColor(getResources().getColor(R.color.design_default_color_primary_dark));
        barDataSet.setValueTextSize(16f);
        BarData barData = new BarData(barDataSet);
        barChart.setData(barData);
        barChart.setTouchEnabled(true);
        barChart.setDragEnabled(true);
        barChart.setScaleEnabled(true);
        barChart.getDescription().setEnabled(false);

        ValueFormatter formatter = new ValueFormatter() {
            @Override
            public String getAxisLabel(float value, AxisBase axis) {
                return expenseModelData.getExpenseDates()[(int) value];
            }
        };

        XAxis xAxis = barChart.getXAxis();
        xAxis.setGranularity(1f);
        xAxis.setValueFormatter(formatter);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);



         weekly_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                expenseModelData.setDataForWeeklyExpense();
                expenseModelData.generateBarChart(barChart, expenseModelData.getExpenseBarEntries(), expenseModelData.getExpenseDates(), getActivity());
            }
        });

        monthly_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                expenseModelData.setDataForMonthlyExpense();
                expenseModelData.generateBarChart(barChart, expenseModelData.getExpenseBarEntries(), expenseModelData.getExpenseDates(), getActivity());
            }
        });

我创建了 generateBarChart() 方法来更新 barChart

public void generateBarChart(BarChart barChart, ArrayList<BarEntry> currExpenseBarEntries, String[] currExpenseDates, Context context) {
        //barChart.invalidate();
        barChart.clear();
        BarDataSet barDataSet = new BarDataSet(currExpenseBarEntries, "Expenses($)");
        barDataSet.setValueTextColor(context.getResources().getColor(R.color.black));
        barDataSet.setColor(context.getResources().getColor(R.color.design_default_color_primary_dark));
        barDataSet.setValueTextSize(16f);
        BarData barData = new BarData(barDataSet);
        barChart.setData(barData);
        barChart.setTouchEnabled(true);
        barChart.setDragEnabled(true);
        barChart.setScaleEnabled(true);
        barChart.getDescription().setEnabled(false);
        barChart.notifyDataSetChanged();

        ValueFormatter formatter = new ValueFormatter() {
            @Override
            public String getAxisLabel(float value, AxisBase axis) {
                return currExpenseDates[(int) value];
            }
        };

        XAxis xAxis = barChart.getXAxis();
        xAxis.setGranularity(1f);
        xAxis.setValueFormatter(formatter);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);


    }

我的堆栈跟踪和一些研究表明问题出在我的 ValueFormatter 上。我收到 IndexOutOfBound 异常。到目前为止我尝试过的事情:

没有解决问题。我将不胜感激。

标签: javaandroidandroid-studio

解决方案


推荐阅读