【问题标题】:NullPointerException (Sharedpreferences)NullPointerException(共享首选项)
【发布时间】:2012-09-08 12:07:11
【问题描述】:

我在开始我的活动时收到 NullPointerException 错误。我的 logcat 说它发生在我的活动中,但没有指定在哪里。我是第一次尝试使用 SharedPreferences 并且不知道错误发生在哪里。

这是我的活动:

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

日志猫:

    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)

【问题讨论】:

  • 正如 Sush 所说,它确实可以告诉您异常发生的位置。 09-14 09:27:26.293:E/AndroidRuntime(589):引起:java.lang.NullPointerException 09-14 09:27:26.293:E/AndroidRuntime(589):在 com.SharedPreferences.Login.SharedPrefLoginActivity.onCreate (SharedPrefLoginActivity.java:58)

标签: android nullpointerexception sharedpreferences


【解决方案1】:

您忘记设置cancelBttn 字段:

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

也移动

 setContentView(R.layout.register);

super.onCreate(savedInstanceState); 之后。 NullPointerException 出现是因为布局没有膨胀。您可以在堆栈跟踪的最后 4 行中看到这一点。

【讨论】:

  • 感谢您的关注。应用修复后,我仍然收到相同的错误。错误可能在其他地方吗?
  • 我更新了我的答案 - 您还需要将 setContentView(R.layout.register) 向上移动。
【解决方案2】:

可能是这条线造成的:

cancelBttn.setOnClickListener (new OnClickListener()

我没有看到 cancelBttn 的任何实例化,所以它在这一行上为空...

【讨论】:

  • 添加了 cancelBttn = (Button) findViewById(R.id.cancel_button);但仍然收到相同的错误....?
  • 因此,您将不得不分享发生异常的行中的内容。将 setContentView 向上移动(如 Nicholas 所建议)在这里对您没有帮助,因为在设置内容视图之前您不会尝试访问任何布局元素
【解决方案3】:

这几行

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 成员的问题,因为它没有附加到视图,因此在引用之前不需要对布局进行膨胀..尽管在调用后设置它的值是明智的设置内容视图()。

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多