0

私は次のような活動をしています:

public class LogoActivity extends Activity{

SharedPreferences data = getSharedPreferences("la",MODE_PRIVATE);

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_logo);
    SharedPreferences.Editor editor = data.edit();

    for(int i=0;i<5;i++){
        ImageAdapter.items[i] = data.getInt(Integer.toString(i),0);
    }
    name = Names.forDrawable(id);
    check.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            a=name.isCorrect(text.getText().toString());
            if(a==true){ 

            ImageAdapter.items[LogoSelectionActivity.pos] = 1;
            Intent intent = new Intent(LogoActivity.this, CorrectActivity.class);
            intent.putExtra ("clicked_position", LogoSelectionActivity.pos);
            startActivity(intent);

            }
            else{
                incorrect.setVisibility(0);
            }

        }
        });

    for(int i = 0;i<5;i++){
        editor.putInt(Integer.toString(i),ImageAdapter.items[i]);
    }
    editor.commit();

    back.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(LogoActivity.this, LogoSelectionActivity.class);
            startActivity(intent);  
            }
    });

}
}

imageAdapterで0または1のような5つのアイテムのステージを保持しています。デフォルトはすべて0です。アクティビティでこのステージを変更しています。変更後、このステージを保存して、ユーザーがアプリを再度開いたときに取得したいと思います。コードを書きましたが、エラーがあります。また、コードの最初ではなく最後で設定を取得しようとしましたが、何も変更されていません。

エラーメッセージ:

03-06 17:27:49.520: E/AndroidRuntime(14808): FATAL EXCEPTION: main
03-06 17:27:49.520: E/AndroidRuntime(14808): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.turkishlogoquiz/com.example.turkishlogoquiz.LogoActivity}: java.lang.NullPointerException
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2024)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.os.Looper.loop(Looper.java:137)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.app.ActivityThread.main(ActivityThread.java:4898)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at java.lang.reflect.Method.invokeNative(Native Method)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at java.lang.reflect.Method.invoke(Method.java:511)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at dalvik.system.NativeStart.main(Native Method)
03-06 17:27:49.520: E/AndroidRuntime(14808): Caused by: java.lang.NullPointerException
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:160)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at com.example.turkishlogoquiz.LogoActivity.<init>(LogoActivity.java:32)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at java.lang.Class.newInstanceImpl(Native Method)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at java.lang.Class.newInstance(Class.java:1319)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
03-06 17:27:49.520: E/AndroidRuntime(14808):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2015)

何か助けはありますか?

4

2 に答える 2

4

コードを次のように変更します:

public class LogoActivity extends Activity{

SharedPreferences data ;  //<<< declare here

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    data = this.getSharedPreferences("la",MODE_PRIVATE); //<<initialize data here
    setContentView(R.layout.activity_logo);
    //...your code here

SharedPreferencesonCreateメソッド内でインスタンス を初期化する必要があります

于 2013-03-06T15:38:47.780 に答える
1
SharedPreferences data = getSharedPreferences("la",MODE_PRIVATE); is wrong

グローバルで共有設定を宣言し、次のようにOnCreate()で取得します

SharedPreferences data;グローバルに

そしてonCreateで

 data= getSharedPreferences("la",MODE_PRIVATE);
于 2013-03-06T15:38:50.660 に答える