繁体   English   中英

在AChartEngine中调用remove(index)

[英]Calling remove(index) in the AChartEngine

我的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 removeY = removeEntry.getValue();”行上获得了空指针。 remove()。 看起来像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

请注意,添加的点的索引突然变成1而不是2,并且itemCount也下降到2,我们只是失去了一个点! 如果我们用更多的点进行测试,则需要更长的时间,并且会看到日志,在这些日志中我们逐渐开始“失去”点,直到它在XYSeries.getY上崩溃为止。 我相信它正在试图消除那些早先神秘消失的观点之一。

编辑1:在这种情况下,我正在绘制一个时间序列,当我用相同的键添加2点(在这种情况下为日期)时出现错误。 remove函数将删除给定键的所有点,但不确定是故意还是错误。 但这很可能是您遇到的相同错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM