MPAndroidChart如何更改数据(增加的数据量)-导致NPE

时间:2019-03-15 08:19:48

标签: java mpandroidchart

在折线图中,我会定期刷新图表中的数据。 这工作正常,并且符合预期。 当我使用的新数据集大于上一个数据集时,就会出现问题。然后,我得到了NullPointerException。

  

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'long java.lang.Long.longValue()'

这是我的方法:

LineData lineData = chart.getLineData();

if(lineData != null) {
   ILineDataSet dataSet = lineData.getDataSetByLabel(label, false);
                lineData.removeDataSet(dataSet);
}
int lineColor = colorDataLine;
int textColor = textColorDataLine;

Collections.sort(entries, new EntryXComparator());
LineDataSet dataSet = new LineDataSet(entries, label);
dataSet.setColor(lineColor);
dataSet.setValueTextColor(textColor);

lineData = new LineData(dataSet);
lineData.setDrawValues(false);
chart.setData(lineData);

chart.setData(lineData);上发生异常:

我从MPChartExample检查了DynamicalAddingActivity.java https://github.com/PhilJay/MPAndroidChart/archive/master.zip

使用addEntry通过迭代添加数据。

LineData data = chart.getData();
data.addEntry(new Entry(randomSet.getEntryCount(), value), randomDataSetIndex);
data.notifyDataChanged();

现在将我的第一种方法更改为以下方法时,仍然会发生错误。

lineData.addDataSet(dataSet);
lineData.setDrawValues(false);
chart.notifyDataSetChanged();

在将方法更改为这种迭代方式时:

LineData lineData = chart.getLineData();
if(lineData == null) {
    lineData = new LineData();
    chart.setData(lineData);
}
lineData.setDrawValues(false);

LineDataSet dataSet = (LineDataSet) lineData.getDataSetByLabel(label, false);
if(dataSet == null){
    dataSet = new LineDataSet(entries, label);
    lineData.addDataSet(dataSet);
}
while(dataSet.getEntryCount() > 0) {
    dataSet.removeLast();
}
for (int i = 0; i < entries.size(); i++) {
    lineData.addEntry(entries.get(i), 0); //edit2: set datasetIndex from i to 0 hardcoded
    lineData.notifyDataChanged();
}

edit2:

那么addEntry对增加的数据量没有任何影响 ->在第一次迭代中,entries.size()为1。 ->在第二次迭代中,entries.size()为10。     ->尽管如此,即使在此迭代中执行了十次addEntry,数据集也只保留第一个添加的条目。数据集的总体entryCount保持为1。

它可以工作,但是由于两次迭代(删除所有旧的,添加所有新的),仍然看起来效率不高。

那么,我在做什么错呢?

那么也许有更好的方法还是这是唯一的方法?

我也想知道两者之间会有什么区别

dataset.addEntry();

linedata.addEntry();

谢谢。

edit1:

当使用null而不是条目列表来初始化数据集时,我的图表以没有数据,没有限制线和没有绘制颜色区域的方式崩溃。

它们被绘制了,但是大约一分钟后。使用null初始化时的等待时间非常长。

edit2: 请参见上方的删除线。

0 个答案:

没有答案