【问题标题】:Clearing Shared Preferences throws a Null Pointer Exception清除共享首选项会引发空指针异常
【发布时间】:2011-08-16 10:04:41
【问题描述】:

每次用户从选项菜单中选择“注销”(R.Id.logout) 时,我都会收到一个空指针异常。我不知道我没有初始化什么。

@Override
        public boolean onOptionsItemSelected(MenuItem item)
        {
            switch (item.getItemId())
            {
                case R.id.settings:             
                    return false;
                case R.id.about:
                    this.startActivity(new Intent(this, About.class));
                    return true;
                case R.id.logout:
                    AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
                    alertbox.setTitle("Logout");
                    alertbox.setMessage("Logging out will remove your credentials from this phone. \nDo you want to logout?");
                    alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
                    {                   
                        public void onClick(DialogInterface dialog, int id) 
                        {
                            Editor e = loginPref.edit();
                            e.clear();

                            Homepage.this.startActivity(new Intent(getApplicationContext(), Login.class));
                            Homepage.this.finish();             
                        }
                    });
                    alertbox.setNegativeButton("No", new DialogInterface.OnClickListener()
                    {                   
                        public void onClick(DialogInterface dialog, int id) 
                        {
                            dialog.cancel();                    
                        }
                    });
                    AlertDialog alert = alertbox.show();
                    return true;
            }
            return false;
        }

日志猫

08-16 10:09:49.705: ERROR/AndroidRuntime(1531): FATAL EXCEPTION: main
08-16 10:09:49.705: ERROR/AndroidRuntime(1531): java.lang.NullPointerException
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at org.*****.android.Homepage$1.onClick(Homepage.java:79)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at android.os.Looper.loop(Looper.java:123)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at java.lang.reflect.Method.invokeNative(Native Method)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at java.lang.reflect.Method.invoke(Method.java:521)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-16 10:09:49.705: ERROR/AndroidRuntime(1531):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 您能否显示您的 logcat 错误详细信息,然后我们可以知道您在哪里可以获得空指针异常,或者请检查 logcat 并在该行上添加注释
  • 你在哪里清理它......?发布更多代码和 logcat..
  • 添加了 logcCat,在此先感谢
  • 你得到 NPE 是因为你调用了一些简单的空变量方法。 LogCat 会告诉您代码中导致 NPE 的行,因此请检查该行并找到未初始化的变量。

标签: android nullpointerexception sharedpreferences


【解决方案1】:

这很简单。 Homepage.java 中第 79 行的内容为空。请检查这是哪一行并将其发布或发布完整的代码,以及包名称和所有内容,以便我们实际上可以提供帮助,因为现在我们只能猜测实际为空的内容。

我的第一个猜测是 loginPref 在:

  Editor e = loginPref.edit();

你初始化 loginPref 了吗?

【讨论】:

  • 不是问题 loginPref = getSharedPreferences(PREFS_NAME, 0);
猜你喜欢
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 2017-04-11
  • 1970-01-01
  • 2013-12-27
相关资源
最近更新 更多