Android 保存首选项

Android 保存首选项,android,Android,我是Android编程的初学者,不幸的是我有一个问题:) 我在游戏中有方法writeSettings(),我试图保存一些变量,以便在希望通过readSettings()方法加载上一个游戏时使用。有一些参数,如第一(第二)PlayerName、第一(第二)PlayerScore等。我试图使用SharedReferences来保存它们,但在启动程序时会出现“强制关闭”对话框 SharedPreferences preferences = getPreferences(MODE_PRIVATE); /

我是Android编程的初学者,不幸的是我有一个问题:)

我在游戏中有方法writeSettings(),我试图保存一些变量,以便在希望通过readSettings()方法加载上一个游戏时使用。有一些参数,如第一(第二)PlayerName、第一(第二)PlayerScore等。我试图使用SharedReferences来保存它们,但在启动程序时会出现“强制关闭”对话框

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

            }
我怎么知道,问题出现在writeSettings()的第一个条目中。 但我不知道我做错了什么

对不起我的英语

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
12-23 16:23:31.334:错误/AndroidRuntime(410):未捕获处理程序:由于未捕获异常而退出线程主线程
12-23 16:23:31.520:错误/AndroidRuntime(410):java.lang.RuntimeException:无法实例化活动组件信息{com.game/com.game.game}:java.lang.NullPointerException
12-23 16:23:31.520:ERROR/AndroidRuntime(410):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于android.app.ActivityThread.access$2200(ActivityThread.java:119)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于android.os.Handler.dispatchMessage(Handler.java:99)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):在android.os.Looper.loop(Looper.java:123)处
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于android.app.ActivityThread.main(ActivityThread.java:4363)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于java.lang.reflect.Method.invokenactive(本机方法)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于java.lang.reflect.Method.invoke(Method.java:521)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于com.android.internal.os.ZygoteInit$methodAndArgscaler.run(ZygoteInit.java:860)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):在dalvik.system.NativeStart.main(本机方法)
12-23 16:23:31.520:错误/AndroidRuntime(410):由以下原因引起:java.lang.NullPointerException
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于android.content.ContextWrapper.getPackageName(ContextWrapper.java:120)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于android.app.Activity.getLocalClassName(Activity.java:3410)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):在android.app.Activity.getPreferences(Activity.java:3444)中
12-23 16:23:31.520:ERROR/AndroidRuntime(410):在com.game.game。(game.java:69)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于java.lang.Class.newInstanceImpl(本机方法)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于java.lang.Class.newInstance(Class.java:1479)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):位于android.app.Instrumentation.newActivity(Instrumentation.java:1021)
12-23 16:23:31.520:ERROR/AndroidRuntime(410):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
12-23 16:23:31.520:错误/AndroidRuntime(410):。。。还有11个
java:69是一个
SharedPreferences preferences=getPreferences(MODE\u PRIVATE)

我就是这样做的:

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

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

我所做的几乎与martipelant的建议相同

获取编辑器:

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

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

AFAIK
Activity.getPreferences()
Context.getSharedReferences(String,int)
的包装,其中String是活动的名称。 它应仅用于访问此活动专用的首选项。 尝试更改代码

SharedPreferences preferences = getPreferences(MODE_PRIVATE);


例外情况如何?您应该在日志catYep中看到一些内容,出现了哪个问题?您应该复制调试输出(日志)中的错误。您可以在第69行附近发布代码吗?tnxUpper 69只是变量声明,lower onCreate()开始。哦,我很愚蠢:)首选项的初始化在onCreate之外。谢谢,你的问题帮助了我!
SharedPreferences preferences = PreferenceManager
                .getDefaultSharedPreferences(context);