1

我正在制作动态壁纸并尝试添加一些用户偏好。如果我有这个:

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    drawType = prefs.getString("drawtype", "0");
}

在完全不相关的行上运行应用程序时,我得到一个 ClassCastException:

Line front = (Line) polyList.get(polyList.size()-1);

如果我注释掉以“drawType =”开头的行,则不会出现异常,并且应用程序运行良好(尽管用户设置没有做任何事情)。

任何人都可以解释这一点,这似乎没有任何意义。如果您需要我的代码的更多部分,我很乐意提供它们。谢谢。

编辑:不知道如何获得堆栈跟踪,所以冒着无用的风险,这是我的 logcat:

02-01 21:45:26.934: ERROR/AndroidRuntime(4264): FATAL EXCEPTION: main
02-01 21:45:26.934: ERROR/AndroidRuntime(4264): java.lang.ClassCastException: com.nickavv.linear.Line
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at com.nickavv.linear.Wallpaper.draw(Wallpaper.java:127)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at com.nickavv.linear.Wallpaper$WallEngine.drawFrame(Wallpaper.java:95)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at com.nickavv.linear.Wallbaser$AnimationEngine.onSurfaceChanged(Wallbaser.java:45)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at android.service.wallpaper.WallpaperService$Engine.updateSurface(WallpaperService.java:558)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at android.service.wallpaper.WallpaperService$Engine.attach(WallpaperService.java:606)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:817)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at android.os.Looper.loop(Looper.java:123)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at java.lang.reflect.Method.invokeNative(Native Method)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at java.lang.reflect.Method.invoke(Method.java:521)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-01 21:45:26.934: ERROR/AndroidRuntime(4264):     at dalvik.system.NativeStart.main(Native Method)
4

2 回答 2

1

我和我的室友重新审视了代码并“玩电脑”。我们通过以下事实解决了这个问题:在尝试用“三角形”填充之前,我的 ArrayList 没有被清除旧的“线”,因此出现了转换错误。我感到既愚蠢又如释重负,就像往常一样。谢谢各位的帮助。

于 2011-02-02T05:47:45.390 回答
0

尽管您说这是一条完全不相关的行,但我建议将 drawType 专门设置为您的首选项中的相同字符串。

如果它仍然失败,我不得不认为 polyList 至少被 drawType 的副作用所践踏。

如果成功,则记录您从 prefs.getString(...) 返回的内容,并确保它是您所期望的。

于 2011-02-02T03:10:30.690 回答