Pregunta

Tengo un programa mínimo que no hace más que permítanme establecer dos preferencias (un entero y una cadena) usando PreferenceActivity de Android. Así que tengo un archivo XML que define mis preferencias, y una actividad que se extiende PreferenceActivity. Mi actividad principal tiene un menú de opciones que pone en marcha mi actividad preferencia. Todo esto funciona muy bien. Puedo configurar mis preferencias y los valores son retenidos durante y después de mis ejecuta el programa.

Ahora, en mi actividad Quiero recuperar esas preferencias. Debe ser fácil, ¿verdad? Aquí está el código de todas las muestras que he visto:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");

El problema es que si rompo en la llamada getInt() y pasar por encima, mi aspecto pila como este y la aplicación se bloqueará si continúo:

  

Tema [<3> principal] (suspendida)
  ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord,   Intención) Línea: 2494
  ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord,   Intención) Línea: 2512
  ActivityThread.access $ 2200 (ActivityThread,   ActivityThread $ ActivityRecord, Intención)   línea: 119
  ActivityThread $ H.handleMessage (Mensaje)   línea: 1863
  ActivityThread $ H (Handler) .dispatchMessage (Mensaje)   línea: 99 Looper.loop línea (): 123
  ActivityThread.main (String []) line:   4363 Method.invokeNative (Object,   Object [], Clase, Clase [], Clase, int,   booleano) la línea: no disponible [nativa   método Method.invoke] (Object,   Objeto ...) Línea: 521
  ZygoteInit $ MethodAndArgsCaller.run ()   línea: 860 ZygoteInit.main (String [])   línea: 618 NativeStart.main (String [])   línea: no disponible [método nativo]

he intentado variaciones sobre el parámetro pasado a getDefaultSharedPreferences (), incluyendo:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

... y probablemente algunos otros en un contexto diferente (es decir, cuando se accede a las preferencias de mi actividad frente a otra actividad frente a alguna función en una clase que no es una actividad. El resultado es siempre el mismo.

He leído una docena de preguntas y respuestas mensajes en la Web de otras personas con este problema que han resuelto mediante la escritura de código idéntica a la mía, así que no espero que hay una solución, pero si alguien tiene alguna idea, que me haga saber.

¿Fue útil?

Solución

No mostrar el seguimiento de la pila. El Thread [<3> main] (Suspended) se emite inútil desde Eclipse. Es necesario examinar el seguimiento de pila real, lo que usted debe conseguir al permitir Android para continuar el diálogo "Fuerza de Cierre", a continuación, mirando LogCat (en su perspectiva DDMS) para el seguimiento de la pila.

Mi conjetura es que usted tiene una preferencia intSetting llamado, pero no es un entero, pero eso es sólo una conjetura. Fruto de la casualidad, no puedo pensar en ninguna de las clases incorporadas Preference que almacenarán una preferencia número entero, ya que la mayoría de almacenar cadenas.

Su forma de acceder a la SharedPreferences defecto (usando this) es correcta y no debería ser necesario cambiar.

Aquí es una proyecto de ejemplo que muestra el uso de PreferenceActivity y conseguir la parte posterior SharedPreferences.

Otros consejos

Sólo para asegurarse de:

  • En AndroidManifest que usted debe tener la Activity que se extiende PreferenceActivity con algo como esto:

  • El Activity que se extiende PreferenceActivity debería tener el siguiente código:

    @ Override     protegida onCreate void (Bundle savedInstanceState) {         super.onCreate (savedInstanceState);         addPreferencesFromResource (R.layout.prefs);         }

donde R.layout.prefs es xml sus preferencias.

Si usted ha hecho ambas cosas, por favor editar su pregunta con el xml que está usando para PPL pueden reproducir su problema.

No se estrellaría, incluso si sus preferencias no se ha guardado, creo que se ha perdido algo de código y el accidente no viene de este punto. ¿Tiene algunos otros hilos?

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