0

I receive a NullPointerException error when starting my activity. My logcat says it is occurring in my activity but doesn’t specify where. I am trying to use SharedPreferences for the first time and don’t know where the error is occurring.

Here is my activity:

    public class SharedPrefLoginActivity extends Activity {


private Button cancelBttn;
private EditText rname;
private EditText rpwrd;
private Button rBttn;
/** Called when the activity is first created. */

private SharedPreferences dhj;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dhj = this.getSharedPreferences("DHJ", MODE_WORLD_READABLE);
    if(dhj.getString("password", null) !=null) {
    setContentView(R.layout.register);
    rname = (EditText) findViewById(R.id.reg_uname);
    rpwrd = (EditText) findViewById(R.id.reg_pswd);
    rBttn = (Button) findViewById(R.id.reg_button);

    rBttn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            SharedPreferences.Editor dhjEditor = dhj.edit();
            dhjEditor.putString("rname", rname.getText().toString());
            dhjEditor.putString("rpwrd", rpwrd.getText().toString());
            dhjEditor.commit();
            Toast.makeText(getApplicationContext(), "Credentials Saved!", Toast.LENGTH_SHORT).show();
    }
     }
      );
       }
    else { 

        Intent i = new Intent(SharedPrefLoginActivity.this, AccessApp.class);
        startActivity(i);   
    }
    cancelBttn.setOnClickListener (new OnClickListener() {
        @Override
        public void onClick(View v) {
            //Close application
            finish();
    }
    });     
    }}

logcat:

    09-14 09:27:26.244: E/AndroidRuntime(589): Uncaught handler: thread main exiting  due to uncaught exception
    09-14 09:27:26.293: E/AndroidRuntime(589): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.SharedPreferences.Login/com.SharedPreferences.Login.SharedPrefLoginActivity}: java.lang.NullPointerException
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.os.Handler.dispatchMessage(Handler.java:99)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.os.Looper.loop(Looper.java:123)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.app.ActivityThread.main(ActivityThread.java:4363)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at java.lang.reflect.Method.invokeNative(Native Method)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at java.lang.reflect.Method.invoke(Method.java:521)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at dalvik.system.NativeStart.main(Native Method)
    09-14 09:27:26.293: E/AndroidRuntime(589): Caused by: java.lang.NullPointerException
    09-14 09:27:26.293: E/AndroidRuntime(589):  at com.SharedPreferences.Login.SharedPrefLoginActivity.onCreate(SharedPrefLoginActivity.java:58)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    09-14 09:27:26.293: E/AndroidRuntime(589):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
4

3 に答える 3

3

フィールドを設定するのを忘れましたcancelBttn:

 cancelBttn = (Button) findViewById(R.id.cancel_button); // Insert your R.id.XXX here.

移動も

 setContentView(R.layout.register);

直後にsuper.onCreate(savedInstanceState);。これNullPointerExceptionは、レイアウトが膨張していないために発生します。スタック トレースの最後の 4 行で確認できます。

于 2012-09-15T18:00:25.353 に答える
2

おそらくこの行が原因です:

cancelBttn.setOnClickListener (new OnClickListener()

インスタンス化が表示されないcancelBttnため、この行では null です...

于 2012-09-15T18:02:23.907 に答える
0

これらの行

Caused by: java.lang.NullPointerException
09-14 09:27:26.293: E/AndroidRuntime(589):  at     com.SharedPreferences.Login.SharedPrefLoginActivity.onCreate(SharedPrefLoginActivity.java:58)
09-14 09:27:26.293: E/AndroidRuntime(589):  at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

NullPointer が onCreate メソッドから来ていることを知っておきましょう。リスナーを登録する前に、まず cancelButtn 変数をインスタンス化する必要があります。ビューにアタッチされていないため、dhj メンバーの問題ではないと思います。そのため、参照する前にレイアウトを膨らませる必要はありません。 setContentView()。

于 2012-09-16T16:45:14.747 に答える