2011-02-02 2 views
1

Я делаю Live Wallpaper и пытаюсь добавить некоторые пользовательские настройки. Если у меня есть это:Android ClassCastException при использовании Preferences.getString

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

Я получаю ClassCastException при запуске приложения на совершенно несвязанной линии:

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

Если я закомментируйте строку, начинающуюся с «drawType =» Я не получаю никаких исключений и приложение работает нормально (хотя без пользовательских настроек ничего делать).

Может кто-нибудь объяснить это вообще, это, кажется, не имеет никакого смысла. Если вам нужно больше частей моего кода, я рад предоставить их. Благодарю.

EDIT: Не знаете, как получить трассировку стека, поэтому на риск оказаться бесполезным, вот мой 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

Просьба отправить трассировку стека –

+0

Это трассировка стека, которую мы ищем. Следующий запрос - можете ли вы показать нам код для ссылочных строк, например Wallpaper.java:127? Это одна из строк, которые вы уже разместили? Вы можете видеть (печатать), какое значение пытается использовать система? –

+0

Строка 127 - вторая строка, которую я опубликовал, Line front = (Line) polyList.get (polyList.size() - 1) ;. polyList.get() возвращает многоугольник, линия которого продолжается. Как я уже сказал, когда предпочтение не сохраняется в drawType, листинг происходит успешно. – Nick

ответ

1

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

0

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

Если все еще не удается, мне придется подумать, что полилист получает попирание хотя бы побочным эффектом drawType.

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

+1

Когда я устанавливаю drawType для любого из своих потенциальных значений («0» или «1») вручную, он работает точно так, как ожидалось. Когда я запишу prefs.getString (..), он возвращает «0» или «1» в зависимости от выбранного элемента предпочтения. – Nick

+0

Еще две мысли ... что такое polyList.get (polyList.size() - 1) .getClass(). GetName())? Похоже, какая-то память где-то повреждается, и вызов prefs.getString() случается, чтобы скрыть проблему. Следите за вызовами в библиотеке и проблемами с буфером памяти. – levis501

Смежные вопросы