2010-12-23 8 views
7

Soy un principiante en la programación de Android, por desgracia tengo un problema :)Guardar preferencias

tengo método writeSettings() en mi juego en el que estoy tratando de salvar algunas variables usarlo cuando desea cargar el último juego por readSettings() método. Hay parámetros como primero (segundo) PlayerName, primero (segundo) PlayerScore y así sucesivamente. Intento utilizar SharedPreferences para guardarlos, pero aparece el cuadro de diálogo "Forzar cierre" al iniciar el programa.

SharedPreferences preferences = getPreferences(MODE_PRIVATE); //Global variable 

    private void writeSettings() { 
       SharedPreferences.Editor editor = preferences.edit(); 
       editor.putInt("timeSave", time); 
       editor.putString("firstPlayerNameSave", firstPlayerNameTextView.getText().toString()); 
       editor.putString("secondPlayerNameSave", secondPlayerNameTextView.getText().toString()); 
       editor.putString("firstPlayerScoreSave", firstPlayerScoreTextView.getText().toString()); 
       editor.putString("secondPlayerScoreSave", secondPlayerScoreTextView.getText().toString()); 
       editor.putInt("nowPlayerSave", nowPlayer);   
       editor.commit(); 

     } 


     private void readSettings() { 
    //"time" parameter program reads in another method 
        firstPlayerNameTextView.setText(preferences.getString("firstPlayerNameSave", "")); 
        secondPlayerNameTextView.setText(preferences.getString("secondPlayerNameSave", "")); 
        firstPlayerScoreTextView.setText(preferences.getString("firstPlayerScoreSave", "")); 
        secondPlayerScoreTextView.setText(preferences.getString("secondPlayerScoreSave", "")); 
        nowPlayer = preferences.getInt("nowPlayerSave", -1); 

      } 

Cómo podría saber, el problema aparece en la primera entrada de writeSettings(). ¿Pero no sé lo que estoy haciendo mal?

Lo siento por mi inglés.

upd.

12-23 16:23:31.334: ERROR/AndroidRuntime(410): Uncaught handler: thread main exiting due to uncaught exception 
12-23 16:23:31.520: ERROR/AndroidRuntime(410): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.game/com.game.Game}: java.lang.NullPointerException 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.os.Looper.loop(Looper.java:123) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at dalvik.system.NativeStart.main(Native Method) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410): Caused by: java.lang.NullPointerException 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.Activity.getLocalClassName(Activity.java:3410) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.Activity.getPreferences(Activity.java:3444) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at com.game.Game.<init>(Game.java:69) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at java.lang.Class.newInstanceImpl(Native Method) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at java.lang.Class.newInstance(Class.java:1479) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409) 
12-23 16:23:31.520: ERROR/AndroidRuntime(410):  ... 11 more 

Game.java:69 es un SharedPreferences preferences = getPreferences(MODE_PRIVATE);

+0

¿Qué pasa con la excepción? Debería ver algo en su log cat –

+0

Sí, ¿qué problema aparece? Debería copiar el error que está en su resultado de depuración (registro). –

+0

¿Podría publicar el código cerca de la línea 69? tnx –

Respuesta

14

Así es como lo hago:

Editor editor = PreferenceManager.getDefaultSharedPreferences(Context).edit(); 
       editor.putString("firstPlayerNameSave", firstPlayerNameTextView.getText().toString());    
       editor.commit(); 

Y para que diga:

firstPlayerNameTextView.setText(PreferenceManager.getDefaultSharedPreferences(Context).getString("firstPlayerNameSave", "")); 
1

Lo que sí es casi idéntico a lo que sugirió martipelant.

Conseguir el editor:

Editor preferenceEditor = getSharedPreferences("com.mycompany.android.myapp",MODE_PRIVATE).edit(); 

y la lectura:

 mSharedPreferences = getSharedPreferences("com.mycompany.android.myapp",Context.MODE_PRIVATE); 
1

yo sepa Activity.getPreferences() es un contenedor para Context.getSharedPreferences(String, int) donde cadena es el nombre de la actividad. Se debe usar solo para acceder a las preferencias que son privadas para esta actividad. Trate de cambiar el código

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 

a

SharedPreferences preferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 
+0

Oh, soy estúpido :) Inicialización de ** preferencias ** estaba fuera de onCreate. Gracias, tu pregunta me ayudó! –

Cuestiones relacionadas