1

编辑:我已经对此进行了进一步研究,并且该问题从根本上不是由 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 可以用来更新图表,还是我需要在其他地方做?

4

0 回答 0