0

2つのステージ0または1を保持するitems配列があります。それらはすべて0を初期化しました。私のアクティビティの1つで、いくつかのアイテムのステージ0を1に変更しました。これらのステージを保存して、アプリを再起動したときに取得しようとしています。

これが私がステージを変える私の活動です:

public class LogoActivity extends Activity{

static SharedPreferences data;

protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_logo);
...
if(a==true){ 

      ImageAdapter.items[LogoSelectionActivity.pos] = 1;
      SharedPreferences.Editor ed = data.edit();
      ed.putInt(Integer.toString(LogoSelectionActivity.pos), 1);
      ed.commit();
   }
...
}

設定から保存されたデータを取得するアクティビティは次のとおりです。

public class LogoSelectionActivity extends Activity {

static int pos;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    for(int i=0;i<5;i++){
        ImageAdapter.items[i] = LogoActivity.data.getInt(Integer.toString(i), 0);
    }
    setContentView(R.layout.activity_list_logos);
...
}

私が書いた最初のアクティビティは、2番目のアクティビティの前に始まることに注意してください。エラーは次のとおりです。

03-07 20:51:52.295: E/AndroidRuntime(25452): FATAL EXCEPTION: main
03-07 20:51:52.295: E/AndroidRuntime(25452): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.turkishlogoquiz/com.example.turkishlogoquiz.LogoSelectionActivity}: java.lang.NullPointerException
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.os.Looper.loop(Looper.java:137)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.app.ActivityThread.main(ActivityThread.java:4898)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at java.lang.reflect.Method.invokeNative(Native Method)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at java.lang.reflect.Method.invoke(Method.java:511)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at dalvik.system.NativeStart.main(Native Method)
03-07 20:51:52.295: E/AndroidRuntime(25452): Caused by: java.lang.NullPointerException
03-07 20:51:52.295: E/AndroidRuntime(25452):    at com.example.turkishlogoquiz.LogoSelectionActivity.onCreate(LogoSelectionActivity.java:32)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.app.Activity.performCreate(Activity.java:5206)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
03-07 20:51:52.295: E/AndroidRuntime(25452):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)

他の行を除外してコードを短縮します。理解していただければ幸いです。intをstringに変更して、キーの配列内の位置番号を使用していることに注意してください。

4

1 に答える 1

1

保存する

 SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_PRIVATE);
            SharedPreferences.Editor prefsEditor = myPrefs.edit();
            prefsEditor.putInt("x", 1);
            prefsEditor.commit();

読むには

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_PRIVATE);
int d = myprefs.getInt("x", -1);
于 2013-03-07T19:25:14.180 に答える