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