2014-12-24 2 views
0

Я извлечение целого значения из sharedpreferences, как это:ClassCastException без какой-либо конкретной ошибки кода

AudioManager Am = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE); 
    int errorThisLine250 = prefs.getInt("adanvlm", Am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); 

и я получаю эту ошибку !!!

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 
     at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:239) 
     at aim.salatuna7.dialogs.AdanDialog.onCreateDialog(AdanDialog.java:250) 

starnge здесь является то, что приложение было прекрасно работает без каких-либо ошибок, сегодня он начинает показывать эту ошибку всякий раз, когда я показываю диалог. Ошибка на int errorThisLine250. Какие-либо предложения?

Edit: Я пробовал:

Integer.parseInt(prefs.getString("adanvlm", String.valueOf(Am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)))); 

и это НЕ работает тоже.

ответ

1

По-видимому, tou первоначально имел это SharedPreference в качестве предпочтения строки, а затем изменил его на целые предпочтения.

Удалите и переустановите приложение, тем самым удалив содержимое внутреннего хранилища и избавившись от старого варианта ваших предпочтений.

+0

или добавить «обратную совместимость» код, который делает prefs.getInt() в примерочных поймать блок, а затем попытаться GetString если КлассCastException брошен! – RobP

+0

Спасибо за очень быстрый ответ, но я пробовал все, что вы говорили много раз, не повезло! любая помощь, пожалуйста? Я застрял @commonsWare – Leebeedev

+0

@CommonsWare, я использую preference.xml, как будто Leebeedev

0

Похоже, ваш EditTextPreference имеет значение по умолчанию, которое строка:

<EditTextPreference android:defaultValue="0" android:key="adanvlm" /> 

Таким образом, вполне вероятно, но немного странно, что вы многие продолжают вместе с использованием строки версии и преобразовать эту строку в int перед тем используя его в вашем диалоговом окне и в другом месте, где требуется int.

// get the preference value as a string 
String adanvlmString = prefs.getString("adanvlm", String.valueOf(Am.getStreamMaxVolume(AudioManager.STREAM_MUSIC))); 
// convert the preference value from string to int 
int adanvlmInt = Integer.parseInt(adanvlmString); 

Или вы могли бы подкласс EditTextPreference следующим образом здесь: PreferenceActivity: save value as integer

+0

Я пробовал ваш подход без везения. Но я попробую ссылку, которую вы предоставили. – Leebeedev

+1

@ Aimen7. Удачи. – petey

+0

Он не работает, он выбрасывает одно и то же исключение в той же строке !!!! – Leebeedev

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