在AChartEngine的ZoomListener中动态添加数据

时间:2013-06-24 19:49:01

标签: android achartengine

编辑:我进一步研究过这个问题并不是由ZoomListener中的代码引起的。我不知道是什么原因引起了我的问题,但我可以确认,如果活动的其余部分编码正确,我在下面发布的代码将会运行。

我正在尝试创建一个Android活动,允许用户使用AChartEngine探索相对较大的数据集(想想一段时间内以30秒为间隔的股票价格,以了解范围)。将兆字节的数据输入图表是一个坏主意,因此每当用户缩放或平移时,我都会动态加载和删除数据。

我认为ZoomListener是将新数据提供给图表的好地方,但这会导致应用程序在侦听器触发时崩溃。

这是崩溃的最简单的代码版本。 (我当然也需要运行mChartView.repaint()来重绘图表,但是如果你想知道为什么它没有那么代码就会崩溃甚至没有那条线。 mZoomedOut布尔值用于防止代码反复运行。

    mZoomListener = new ZoomListener() {
        @Override
        public void zoomApplied(ZoomEvent zoomEvent) {

            if((mRenderer.getXAxisMax()-mRenderer.getXAxisMin()) > 110){
                mZoomedOut = true;
            }

            if((mRenderer.getXAxisMax()-mRenderer.getXAxisMin()) < 100 && mZoomedOut){
                mZoomedOut = false;
                mCurrentSeries.clear();
                double x = 1;
                double y = 100;
                mCurrentSeries.add(x, y);
            }
        }

        @Override
        public void zoomReset() {
        }
    };

以下是生成的堆栈跟踪:

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
    at java.util.ArrayList.get(ArrayList.java:304)
    at org.achartengine.chart.LineChart.drawSeries(LineChart.java:168)
    at org.achartengine.chart.XYChart.drawSeries(XYChart.java:518)
    at org.achartengine.chart.XYChart.draw(XYChart.java:311)
    at org.achartengine.GraphicalView.onDraw(GraphicalView.java:168)
    at android.view.View.draw(View.java:10978)
    at android.view.View.getDisplayList(View.java:10417)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597)
    at android.view.View.getDisplayList(View.java:10380)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597)
    at android.view.View.getDisplayList(View.java:10380)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597)
    at android.view.View.getDisplayList(View.java:10380)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597)
    at android.view.View.getDisplayList(View.java:10380)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597)
    at android.view.View.getDisplayList(View.java:10380)
    at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:875)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:1918)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1642)
    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2450)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4444)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
    at dalvik.system.NativeStart.main(Native Method)

可以使用ZoomListener更新图表,还是需要在其他地方进行更新?

0 个答案:

没有答案