Почему я получаю ClassCastException здесь? - PullRequest
2 голосов
/ 29 января 2011

Я создаю приложение для Android и пытаюсь использовать PreferenceActivity.

Я получаю ошибку 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);
}

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

1 Ответ

9 голосов
/ 29 января 2011

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

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

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

...