2011-02-02 63 views
1

我正在製作動態壁紙並嘗試添加一些用戶首選項。如果我有這樣的:使用Preferences.getString時發生Android ClassCastException

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) 
+2

請發佈堆棧跟蹤 – 2011-02-02 03:13:32

+0

這是我們正在尋找的堆棧跟蹤。下一個請求 - 你能向我們展示引用線的代碼,比如Wallpaper.java:127嗎?這是你已經發布的行嗎?你能看到(打印)系統試圖施放什麼樣的價值嗎? – 2011-02-02 04:01:07

回答

1

我的室友和我重新看了一遍代碼,然後「玩了電腦」。我們通過以下事實解決了這個問題:我的ArrayList在嘗試填充「Triangle」之前未被清除舊的「Line」,從而導致了鑄造錯誤。同時,我感到既愚蠢又輕鬆,就像它一樣。謝謝各位的幫助。

0

儘管你指出,這是一個完全不相關的線,我建議設置drawType特別是與您的首選項中相同的字符串。

如果它仍然失敗,我不得不認爲polyList至少被drawType的副作用踐踏。

如果成功,則記錄您從prefs.getString(...)返回的內容,並確保它符合您的期望。

相關問題