2010-12-23 24 views
7

Ich bin ein Anfänger in Android Programmierung, leider habe ich ein Problem :)Einstellungen speichern

Ich habe Methode write() in meinem Spiel, in dem ich versuche, einige Variablen zu speichern, es zu benutzen, wenn möchte das letzte Spiel laden von readSettings() Methode. Es gibt Parameter wie ersten (zweiten) PlayerName, ersten (zweiten) PlayerScore und so weiter. Ich versuche, SharedPreferences zu verwenden, um sie zu speichern, aber ich erhalte "Force Close" -Dialog, wenn Programm gestartet wird.

Wie ich wissen konnte, erscheint Problem im ersten Eintrag von writeSettings(). Aber ich weiß nicht, was ich falsch mache?

Entschuldigung für mein Englisch.

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 ist ein SharedPreferences preferences = getPreferences(MODE_PRIVATE);

+0

Was ist mit der Ausnahme zu ändern? Sie sollten etwas in Ihrer Protokollkatze sehen –

+0

Yep, welches Problem erscheint? Sie sollten den Fehler kopieren, der sich in Ihrer Debug-Ausgabe (Protokoll) befindet. –

+0

Könnten Sie den Code in der Nähe der Linie 69 posten? tnx –

Antwort

14

Dies ist, wie ich es tun:

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

Und zu lesen:

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

Was ich fast zu tun ist identisch mit dem, was Martipelant vorgeschlagen hat.

gibt es die Herausgeber:

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

und Lesen:

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

AFAIK Activity.getPreferences() ist ein Wrapper für Context.getSharedPreferences(String, int) wo String der Name der Aktivität. Es sollte nur für den Zugriff auf Einstellungen verwendet werden, die für diese Aktivität privat sind. Versuchen Sie den Code

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 

zu

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

Oh, ich bin dumm :) Initialisierung von ** Präferenzen ** war außerhalb von onCreate. Danke, deine Frage hat mir geholfen! –

Verwandte Themen