Android ClassCastException при использовании Preferences.getString - PullRequest
1 голос
/ 02 февраля 2011

Я делаю живые обои и пытаюсь добавить некоторые пользовательские настройки.Если у меня есть это:

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 ]

1 голос
/ 02 февраля 2011

Мы с соседом по-новому взглянули на код и как бы "играли в компьютер".Мы решили это тем, что мой ArrayList не был очищен от старых «Линий», прежде чем пытаться заполнить его «Треугольником», таким образом, ошибка приведения.Я чувствую себя одновременно глупо и облегченно, как всегда.Всем спасибо за помощь.

0 голосов
/ 02 февраля 2011

Несмотря на то, что вы указали, что это совершенно не связанная линия, я предлагаю установить drawType специально для той же строки, что и в ваших префсах.

если все равно не получится, я должен подумать, что polyList растоптан по крайней мере из-за побочного эффекта drawType.

если это удастся, запишите, что вы получаетеот prefs.getString (...) и убедитесь, что это то, что вы ожидаете.

...