Pregunta

Estoy creando una aplicación de Android e intento usar una empresa preference.

Estoy recibiendo el java.lang.classcastException: java.lang.string error cuando llega a esta línea return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_TERM, USER_TERM_DEF);

Pensé que podría ser porque no lo estoy convirtiendo correctamente desde su valor de cadena en el cuadro EditText a la int -INT que necesito, pero no puedo entender cómo solucionar esto, ¿o es incluso la causa? Estoy desconcertado.

Aquí está mi clase de actividad de preferencia:

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);
}

Y aquí está el bit de código donde estoy tratando de usar las preferencias dentro de otra clase:

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

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

El Android Logcat completo, he subido aquí: http://freetexthost.com/v3t4ta3wbi

¿Fue útil?

Solución

Tienes una preferencia que se almacena como un String Y estás tratando de leerlo como un int, por lo tanto, la ClassCastException.

Si está feliz de dejar la preferencia almacenada como una cadena, podría usar getString y pasar ese valor a Integer.parseInt() Para conseguir un int.

De lo contrario, debe asegurarse de que el valor se escriba a las preferencias como un int.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top