2

Я создаю приложение для Android, и я пытаюсь использовать PreferenceActivity.Почему я получаю ClassCastException здесь?

Я получаю java.lang.ClassCastException: java.lang.String ошибку, когда он попадает в эту линию return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_TERM, USER_TERM_DEF);

Я думал, что это может быть потому, что я не преобразуя его правильно от его строки значение в поле EditText для int, которое мне нужно, но я не могу понять, как это исправить, или это даже причина? Я смущен.

Вот мой класс предпочтения активности:

public class UserPrefs extends PreferenceActivity { 
//option names and default vals 
private static final String USER_TERM = "term_length"; 
private static final String USER_YEAR = "year_length"; 
private static final int USER_TERM_DEF = 12; 
private static final int USER_YEAR_DEF = 34; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
} 

public static int getTermLength(Context context){ 
    try{ 
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_TERM, USER_TERM_DEF); 
    }catch (ClassCastException e){Log.v("getTermLength", "error::: " + e); } 
    //return 1;//temporary, needed to catch the error and couldn't without adding a return outside the block.// 
} 
public static int getYearLength(Context context){ 
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_YEAR, USER_YEAR_DEF); 
} 

А вот кусочек кода, где я пытаюсь использовать предпочтение внутри другого класса:

public float alterForFrequency(Context keypadContext, float enteredAmount, String spinnerPosition){ 

    int termLength = UserPrefs.getTermLength(keypadContext); 
    int yearLength = UserPrefs.getYearLength(keypadContext); 
} 

Полный андроид LogCat, я 've загружено здесь: http://freetexthost.com/v3t4ta3wbi

+0

Не могли бы вы разместить полный стек? Каково время возврата 'PreferenceManager.getDefaultSharedPreferences (context)'? Что такое подпись метода getInt()? – PaoloVictor

+0

@ Hunter2, Черт. Извините, я новичок в программировании и позорно не могу ответить ни на один из этих вопросов: /. Но я могу опубликовать содержимое андроида logcat (которое у меня есть), если это поможет, и если вы будете достаточно любезны, чтобы сказать мне, как получить стек в Eclipse, я тоже это сделаю. Спасибо, в любом случае. – Holly

+0

Я уверен, что @ Hunter2 означал stacktrace класса ClassCastException. Вы можете удалить try/catch, а затем отправить logcat. Во всяком случае, это 'getInt (String, int)', поэтому это должно быть правильно. – bigstones

ответ

9

У вас есть предпочтение, которое хранится как String, и вы пытаетесь прочитать его как int, отсюда ClassCastException.

Если вы хотите оставить предпочтение сохраненным в виде строки, вы можете просто использовать getString и передать это значение Integer.parseInt(), чтобы получить int.

В противном случае вам нужно убедиться, что значение будет записано в предпочтениях как int.

+0

Ofcourse спасибо! – Holly

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