gpt4 book ai didi

java - 在AChartEngine中调用remove(index)

转载 作者:行者123 更新时间:2023-12-01 04:55:50 25 4
gpt4 key购买 nike

我在使用 AChartEngine 库时遇到问题。在 XYSeries 实例上调用 remove(index) 会出现空指针异常。这很奇怪,因为我知道该系列存在并且在崩溃之前显示了设置计数。

public View addDataView(){

int datasetCount = dataset.getSeriesAt(0).getItemCount();
XYSeries seriesA = dataset.getSeriesAt(0);
XYSeries seriesB = dataset.getSeriesAt(1);

/** Enforce max data points on the displayed chart */
if (datasetCount > maximumDataPoints - 1) {
System.out.println("SizeOfSeries: "+seriesA.getItemCount());

seriesA.remove(0);
seriesB.remove(0);
}

//d.getTime() format: 1357120800000
seriesA.add(new Date().getTime(), 20 + new Random().nextInt() % 100); // PR // TODO
seriesB.add(new Date().getTime(), 20 + new Random().nextInt() % 100); // BO // TODO;

dataset = new XYMultipleSeriesDataset();
dataset.addSeries(seriesA);
dataset.addSeries(seriesB);

autoscroll();

return ChartFactory.getTimeChartView(context, dataset, renderer, "`ss h:mm a");
}

这是相关的 logcat 输出:

01-04 14:16:31.806: I/System.out(25215): SizeOfSeries: 20
01-04 14:16:31.806: D/AndroidRuntime(25215): Shutting down VM
01-04 14:16:31.806: W/dalvikvm(25215): threadid=1: thread exiting with uncaught exception (group=0x410fa300)
01-04 14:16:31.806: E/AndroidRuntime(25215): FATAL EXCEPTION: main
01-04 14:16:31.806: E/AndroidRuntime(25215): java.lang.NullPointerException
01-04 14:16:31.806: E/AndroidRuntime(25215): at org.achartengine.model.XYSeries.getY(XYSeries.java:169)
01-04 14:16:31.806: E/AndroidRuntime(25215): at org.achartengine.model.XYSeries.initRange(XYSeries.java:83)
01-04 14:16:31.806: E/AndroidRuntime(25215): at org.achartengine.model.XYSeries.remove(XYSeries.java:140)
01-04 14:16:31.806: E/AndroidRuntime(25215): at charts.Chart.addDataView(Chart.java:75)
01-04 14:16:31.806: E/AndroidRuntime(25215): at com.example.pml.PulseRateActivity$ChartThread.onProgressUpdate(PulseRateActivity.java:68)
01-04 14:16:31.806: E/AndroidRuntime(25215): at com.example.pml.PulseRateActivity$ChartThread.onProgressUpdate(PulseRateActivity.java:1)
01-04 14:16:31.806: E/AndroidRuntime(25215): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:647)
01-04 14:16:31.806: E/AndroidRuntime(25215): at android.os.Handler.dispatchMessage(Handler.java:99)
01-04 14:16:31.806: E/AndroidRuntime(25215): at android.os.Looper.loop(Looper.java:137)
01-04 14:16:31.806: E/AndroidRuntime(25215): at android.app.ActivityThread.main(ActivityThread.java:4898)
01-04 14:16:31.806: E/AndroidRuntime(25215): at java.lang.reflect.Method.invokeNative(Native Method)
01-04 14:16:31.806: E/AndroidRuntime(25215): at java.lang.reflect.Method.invoke(Method.java:511)
01-04 14:16:31.806: E/AndroidRuntime(25215): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
01-04 14:16:31.806: E/AndroidRuntime(25215): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
01-04 14:16:31.806: E/AndroidRuntime(25215): at dalvik.system.NativeStart.main(Native Method)

最佳答案

我也有同样的问题。最初,如果您删除一个最大/最小的点,问题来自于 initRange()。但在评论 initRange 之后,我仍然在 'double returnedY = returnedEntry.getValue();' 行上得到一个空指针的删除()。它看起来像 mXY.removeByIndex(index);返回一个值设置为 null 的元素,但我找不到原因。

我正在使用 subversion 上可用的最新版本运行。在我看来,这可能像是某种竞争条件,因为它并不总是同时失败。我构建了一个“滑动窗口”循环,在其中维护图表上给定数量的恒定点。在这个例子中,它只有 3,所以在第三点之后,每次我添加一个点时,我都会删除另一个点。起初日志看起来很正常:

01-11 23:06:48.060: E/AChartGraph(2038): Added 1 item.  getIndexForKey: 0
01-11 23:06:48.060: E/AChartGraph(2038): series1.getItemCount(): 1
01-11 23:06:48.060: E/AChartGraph(2038): Added 1 item. getIndexForKey: 1
01-11 23:06:48.060: E/AChartGraph(2038): series1.getItemCount(): 2
01-11 23:06:48.160: E/AChartGraph(2038): Added 1 item. getIndexForKey: 2
01-11 23:06:48.160: E/AChartGraph(2038): series1.getItemCount(): 3
01-11 23:06:48.160: E/AChartGraph(2038): Removed item 0. series1.getItemCount(): 2
01-11 23:06:48.160: E/AChartGraph(2038): Added 1 item. getIndexForKey: 2
01-11 23:06:48.160: E/AChartGraph(2038): series1.getItemCount(): 3
01-11 23:06:48.160: E/AChartGraph(2038): Removed item 0. series1.getItemCount(): 2
01-11 23:06:48.160: E/AChartGraph(2038): Added 1 item. getIndexForKey: 2
01-11 23:06:48.160: E/AChartGraph(2038): series1.getItemCount(): 3
01-11 23:06:48.160: E/AChartGraph(2038): Removed item 0. series1.getItemCount(): 2
01-11 23:06:48.160: E/AChartGraph(2038): Added 1 item. getIndexForKey: 2
01-11 23:06:48.160: E/AChartGraph(2038): series1.getItemCount(): 3

这种情况会一直持续下去,直到发生这种情况:

01-11 23:06:55.300: E/AChartGraph(2038): Added 1 item.  getIndexForKey: 2
01-11 23:06:55.300: E/AChartGraph(2038): series1.getItemCount(): 3
01-11 23:06:55.300: E/AChartGraph(2038): Removed item 0. series1.getItemCount(): 2
01-11 23:06:55.300: E/AChartGraph(2038): Added 1 item. getIndexForKey: 1
01-11 23:06:55.300: E/AChartGraph(2038): series1.getItemCount(): 2
01-11 23:06:55.300: E/AChartGraph(2038): Removed item 0. series1.getItemCount(): 1
01-11 23:06:55.300: E/AChartGraph(2038): Added 1 item. getIndexForKey: 2
01-11 23:06:55.300: E/AChartGraph(2038): series1.getItemCount(): 2
01-11 23:06:55.300: W/dalvikvm(2038): threadid=14: thread exiting with uncaught exception (group=0x40bfb930)
01-11 23:06:55.320: E/AndroidRuntime(2038): FATAL EXCEPTION: AsyncTask #4
01-11 23:06:55.320: E/AndroidRuntime(2038): java.lang.RuntimeException: An error occured while executing doInBackground()
01-11 23:06:55.320: E/AndroidRuntime(2038): at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-11 23:06:55.320: E/AndroidRuntime(2038): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-11 23:06:55.320: E/AndroidRuntime(2038): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-11 23:06:55.320: E/AndroidRuntime(2038): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-11 23:06:55.320: E/AndroidRuntime(2038): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-11 23:06:55.320: E/AndroidRuntime(2038): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-11 23:06:55.320: E/AndroidRuntime(2038): at java.lang.Thread.run(Thread.java:856)
01-11 23:06:55.320: E/AndroidRuntime(2038): Caused by: java.lang.NullPointerException
01-11 23:06:55.320: E/AndroidRuntime(2038): at org.achartengine.model.XYSeries.getY(XYSeries.java:169)
01-11 23:06:55.320: E/AndroidRuntime(2038): at org.achartengine.model.XYSeries.initRange(XYSeries.java:83)
01-11 23:06:55.320: E/AndroidRuntime(2038): at org.achartengine.model.XYSeries.remove(XYSeries.java:140)
01-11 23:06:55.320: E/AndroidRuntime(2038): at com.mbev.android.Tmty.Helpers.AChartGraph.addAndPrune(AChartGraph.java:226)
01-11 23:06:55.320: E/AndroidRuntime(2038): at com.mbev.android.Tmty.DashboardFragment$startUpdateTmtyThread.doInBackground(DashboardFragment.java:284)
01-11 23:06:55.320: E/AndroidRuntime(2038): at com.mbev.android.Tmty.DashboardFragment$startUpdateTmtyThread.doInBackground(DashboardFragment.java:1)
01-11 23:06:55.320: E/AndroidRuntime(2038): at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-11 23:06:55.320: E/AndroidRuntime(2038): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-11 23:06:55.320: E/AndroidRuntime(2038): ... 3 more

请注意,添加点的索引突然从 2 变为 1,并且 itemCount 也下降到 2,我们刚刚丢失了一个点!如果我们用更多的点来测试它,则需要更长的时间,并且我们会看到日志,其中我们逐渐开始“丢失”点,直到它在 XYSeries.getY 上崩溃。我相信它正在试图删除之前神秘消失的那些点之一。

编辑1:在本例中,我正在绘制时间序列,当我添加具有相同键(本例中为日期)的 2 个点时,出现了错误。 删除函数会删除给定键的所有点,但不确定这是有意为之还是错误。但它很可能与您遇到的错误相同。

关于java - 在AChartEngine中调用remove(index),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com