使用Preferences.getString时的Android ClassCastException

使用Preferences.getString时的Android ClassCastException,android,preferences,classcastexception,Android,Preferences,Classcastexception,我正在制作一张实时壁纸,并试图添加一些用户偏好。如果我有这个: public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { drawType = prefs.getString("drawtype", "0"); } 在完全不相关的线路上运行应用程序时,我得到一个ClassCastException: Line front = (Line) polyList.get(polyList.size

我正在制作一张实时壁纸,并试图添加一些用户偏好。如果我有这个:

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    drawType = prefs.getString("drawtype", "0");
}
在完全不相关的线路上运行应用程序时,我得到一个ClassCastException:

Line front = (Line) polyList.get(polyList.size()-1);
如果我注释掉以“drawType=”开头的行,则不会出现任何异常,应用程序工作正常(尽管没有用户设置)

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

编辑:不确定如何获取堆栈跟踪,因此冒着无益的风险,以下是我的日志:

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)

尽管您声明这是一个完全不相关的行,但我建议将drawType专门设置为prefs中的同一个字符串

如果它仍然失败,我不得不认为折线图至少会被drawType的副作用所破坏


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

尽管您声明这是一个完全不相关的行,但我建议将drawType专门设置为prefs中的同一字符串

如果它仍然失败,我不得不认为折线图至少会被drawType的副作用所破坏


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

我的室友和我重新看了一遍代码,就这样“玩电脑”。我们解决了这个问题,因为我的ArrayList在尝试用“三角形”填充之前没有清除旧的“线”,因此出现了铸造错误。我感到既愚蠢又轻松,就像往常一样。谢谢大家的帮助。

我的室友和我重新看了一遍代码,就这样“玩电脑”。我们解决了这个问题,因为我的ArrayList在尝试用“三角形”填充之前没有清除旧的“线”,因此出现了铸造错误。我感到既愚蠢又轻松,就像往常一样。谢谢大家的帮助。

当我手动将drawType设置为其任意一个潜在值(“0”或“1”)时,它完全按照预期工作。当我记录prefs.getString(..)时,它根据我选择的首选项返回“0”或“1”。还有两个想法。。。什么是polyList.get(polyList.size()-1.getClass().getName())?听起来好像有些内存在某个地方损坏了,调用prefs.getString()恰好隐藏了问题。注意本机库调用和内存缓冲区问题。当我手动将drawType设置为其潜在值(“0”或“1”)时,它的工作方式与预期完全相同。当我记录prefs.getString(..)时,它根据我选择的首选项返回“0”或“1”。还有两个想法。。。什么是polyList.get(polyList.size()-1.getClass().getName())?听起来好像有些内存在某个地方损坏了,调用prefs.getString()恰好隐藏了问题。注意本机库调用和内存缓冲区问题。这就是我们要寻找的堆栈跟踪。下一个请求-你能给我们看看引用行的代码吗,比如Wallpaper.java:127?那是你已经贴的那一行吗?您能看到(打印)系统试图转换的值吗?第127行是我发布的第二行,行前=(行)polyList.get(polyList.size()-1);。get()返回直线延伸的多边形。正如我所说,当首选项没有保存到drawType中时,转换会成功进行。这就是我们要寻找的堆栈跟踪。下一个请求-你能给我们看看引用行的代码吗,比如Wallpaper.java:127?那是你已经贴的那一行吗?您能看到(打印)系统试图转换的值吗?第127行是我发布的第二行,行前=(行)polyList.get(polyList.size()-1);。get()返回直线延伸的多边形。正如我所说,当首选项未保存到drawType中时,转换将成功进行。