编辑:我进一步研究过这个问题并不是由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更新图表,还是需要在其他地方进行更新?