MPAndroidChart构造器参数不匹配:ArrayList<ILineDataSet>无法转为List<String>
问题解决:LineData构造方法参数不匹配错误
错误原因
你使用的MPAndroidChart版本中,LineData没有直接接收ArrayList<ILineDataSet>的构造方法,编译器仅识别到接收字符串列表/数组的构造方法,导致参数类型不匹配。
解决方法
根据你使用的MPAndroidChart版本选择对应方案:
方案1:MPAndroidChart v2.x版本
该版本的LineData需要同时传入X轴标签列表和数据集列表,构造方法为LineData(List<String> xVals, List<ILineDataSet> dataSets)。修改代码如下:
private void exqShowBtn() { btnShow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 先获取X轴标签列表 ArrayList<String> xLabels = new ArrayList<>(); Cursor cursor = sqLiteDatabase.query("myTable", new String[]{"xValues"}, null, null, null, null, null); while (cursor.moveToNext()) { xLabels.add(String.valueOf(cursor.getInt(0))); } cursor.close(); // 重新创建数据集(避免初始化阶段空指针) LineDataSet lineDataSet = new LineDataSet(getDataValues(), "Dupa"); ArrayList<ILineDataSet> dataSets = new ArrayList<>(); dataSets.add(lineDataSet); // 创建LineData lineData = new LineData(xLabels, dataSets); lineChart.clear(); lineChart.setData(lineData); lineChart.invalidate(); } }); }
方案2:MPAndroidChart v3.x及以上版本
该版本支持直接传入数据集列表,可改用可变参数构造方法:
private void exqShowBtn() { btnShow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 重新创建数据集(避免初始化阶段空指针) LineDataSet lineDataSet = new LineDataSet(getDataValues(), "Dupa"); ArrayList<ILineDataSet> dataSets = new ArrayList<>(); dataSets.add(lineDataSet); // 创建LineData lineData = new LineData(dataSets.toArray(new ILineDataSet[0])); lineChart.clear(); lineChart.setData(lineData); lineChart.invalidate(); } }); }
额外修复:避免空指针异常
你的原代码中LineDataSet lineDataSet = new LineDataSet(getDataValues(),null);在类初始化阶段执行,此时sqLiteDatabase还未初始化,调用getDataValues()会触发空指针。上面的解决方法中已将数据集创建移到点击事件内,确保数据库初始化完成后再获取数据。
内容的提问来源于stack exchange,提问作者Antosiewicz
相关产品推荐
相关产品推荐

