0

アプリで作業していて、チェックボックス オプションの obe の状態を保存したいのですが、SharedPreferences クラスを (初めて使用して) 使用しようとすると、nullpointer 例外が発生します。トラブルシューティングを数時間行っていますが、解決策が見つかりません。誰かがこれを見て、何が悪いのか教えてもらえますか? 完全なコードはかなり長くなりますが、これは私に null ポインター例外を与える公園です。私はそれがSharedPreferencesに関係していることを知っています。

package us.mattmccoy.meanfind;

//import java.util.Arrays;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ClipData;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {


//saved data stuff needed
SharedPreferences preferences = this.getSharedPreferences("us.mattmccoy.meanfind", Context.MODE_PRIVATE); 
Editor edit = preferences.edit();
//private data using saved data
String autoclearKEY = "us.mattmccoy.meanfind.AUTOCLEAR";
boolean autoclear = preferences.getBoolean(autoclearKEY, false);

//normal private data
final Context con1 = this;
int dividend;String dataFixed;boolean tb;
private CheckBox myCBox, acBox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    addListenerBoxes();
    if(autoclear == true){
        acBox.setChecked(true);
    }else{
        acBox.setChecked(false);
    }
}
//check box listeners
public void addListenerBoxes(){
    //instantiate boxes
    acBox = (CheckBox) findViewById(R.id.chex2);
    acBox.setOnClickListener(new OnClickListener() {

          @Override
          public void onClick(View v) {
                    //is acBox checked?
            if (((CheckBox) v).isChecked()) {
                edit.putBoolean(autoclearKEY, true).commit();
            }else{
                edit.putBoolean(autoclearKEY, false).commit();
            }
          }
    });
    myCBox = (CheckBox) findViewById(R.id.chex);

}     

エラーメッセージ:

http://pastebin.com/5P2Mfwik

4

1 に答える 1

1

この行を変更

SharedPreferences preferences = this.getSharedPreferences("us.mattmccoy.meanfind", Context.MODE_PRIVATE); 

SharedPreferences preferences; = this.getSharedPreferences("us.mattmccoy.meanfind", Context.MODE_PRIVATE); 

そして、置きます

preferences = this.getSharedPreferences("us.mattmccoy.meanfind", Context.MODE_PRIVATE);

onCreate()

あなたはContextそれを確立する前に使用しようとしてonCreate()いるので、あなたは乗っNPEていcontextます。これらの行も移動する必要があります

Editor edit = preferences.edit();
boolean autoclear = preferences.getBoolean(autoclearKEY, false);

初期化しonCreate()た後、または初期化するまでpreferences別のものを取得します。だから、それは次のようなものでなければなりませんNPEpreferencesnull

public class MainActivity extends Activity {
//saved data stuff needed
SharedPreferences preferences;   //declare them
Editor edit;
//private data using saved data
String autoclearKEY = "us.mattmccoy.meanfind.AUTOCLEAR";
boolean autoclear;
        @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SharedPreferences preferences; = this.getSharedPreferences("us.mattmccoy.meanfind",   Context.MODE_PRIVATE);
    Editor edit = preferences.edit();   //initialize them
    boolean autoclear = preferences.getBoolean(autoclearKEY, false);
    addListenerBoxes();
    if(autoclear == true){
        acBox.setChecked(true);
    }else{
        acBox.setChecked(false);
    }

これで問題が解決しない場合は、完全な logcat を投稿してください

于 2013-05-10T23:27:58.317 に答える