Android 共享首选项的空指针异常

2024-02-24

我试图在共享首选项中保存一个整数值,并在应用程序重新启动时再次加载它。

我在我的主要活动中创建了一个共享首选项,并尝试在单击菜单项时在另一个菜单侦听器类中保存整数值。菜单侦听器类位于不同的包中,并且菜单侦听器类扩展了主活动。

但是当我尝试这样做时,我遇到了空指针异常。

我也经历过这个link https://stackoverflow.com/questions/5991289/sharedpreferences-null-pointer-exception!.但这似乎对我没有帮助。

这是我的代码:

主要活动:

    protected SharedPreferences mPrefs;
protected SharedPreferences.Editor mEditor;
protected Context  main_activityclass_context; //EDIT
public static int count=0;

@Override
protected void onCreate(final Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);


     mPrefs = this.getSharedPreferences("THEME", 0);
     mEditor = mPrefs.edit();
    }

菜单监听器类:

    case  mainActivity.MENU_ITEM_THEME_DARK:
    {

        mainActivity.count=1;

        mPrefs =main_activityclass_context.getSharedPreferences("THEME", 0); //EDIT
        mEditor = mPrefs.edit();
        mEditor.putInt("Theme_count", mainActivity.count).commit();


    break;
    }

我在菜单侦听器中的行上收到空指针异常:

       mPrefs = getSharedPreferences("THEME", 0);
        mEditor = mPrefs.edit();    

我的日志猫:

      08-03 10:54:03.650: E/AndroidRuntime(31258): FATAL EXCEPTION: main
      08-03 10:54:03.650: E/AndroidRuntime(31258): java.lang.NullPointerException
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at               android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:153)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at de.exb.ptpt.tablet.menu.TabletMenuListener.onMenuItemClick(TabletMenuListener.java:215)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:144)
       08-03 10:54:03.650: E/AndroidRuntime(31258):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
       08-03 10:54:03.650: E/AndroidRuntime(31258):     at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:156)
       08-03 10:54:03.650: E/AndroidRuntime(31258):     at android.widget.AdapterView.performItemClick(AdapterView.java:292)
       08-03 10:54:03.650: E/AndroidRuntime(31258):     at android.widget.AbsListView.performItemClick(AbsListView.java:1058)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at android.widget.AbsListView$1.run(AbsListView.java:3168)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at android.os.Handler.handleCallback(Handler.java:605)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at android.os.Handler.dispatchMessage(Handler.java:92)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at android.os.Looper.loop(Looper.java:137)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at android.app.ActivityThread.main(ActivityThread.java:4424)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at java.lang.reflect.Method.invokeNative(Native Method)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at java.lang.reflect.Method.invoke(Method.java:511)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
      08-03 10:54:03.650: E/AndroidRuntime(31258):  at dalvik.system.NativeStart.main(Native Method)

谁能帮帮我吗?

谢谢。


好的方法之一是,创建一个辅助类来声明、保存和检索首选项。您可以参考以下代码示例:

public class PreferencesHelper {

private SharedPreferences sharedPreferences;
private Editor editor;

public PreferencesHelper(Context context) {
this.sharedPreferences = getPreferences(MODE_PRIVATE);    
this.editor = sharedPreferences.edit(); }

public String GetPreferences(String key) {
    return sharedPreferences.getString(key, "");
}

public void SavePreferences(String key, String value) {
editor.putString(key, value);    
editor.commit();  
}
}  

在活动的 onCreate 事件中,您可以创建 PreferencesHelper 对象并获取所有保存的首选项,例如:

Prefs = new PreferencesHelper(getApplicationContext());  

Prefs.GetPreferences("YOURARGUMENT");  

您可以保存首选项,例如:

Prefs.SavePreferences(key, value);  

希望对你有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 共享首选项的空指针异常 的相关文章

随机推荐

  • Cassandra 中分区键、复合键和集群键之间的区别?

    我一直在网上阅读文章以了解以下内容之间的差异key类型 但这对我来说似乎很难理解 例子肯定有助于更好地理解 primary key partition key composite key clustering key 对此有很多困惑 我会尽
  • 使用 jQuery,如何选择元素 id 以某个字符串结尾的所有元素?

    使用jQuery 如何选择其中的所有元素id属性以某个字符串结尾 有一个属性结尾为选择器 attr value http api jquery com attribute ends with selector 像这样 id somethin
  • 当重叠很少时找到重叠间隔

    我有一个巨大的数据库表n整数区间 例如 1 5 4 16 6434 114343 并且需要找出哪些间隔相互重叠 有丰富的SO的类似问题 https stackoverflow com questions 4542892 possible i
  • 为什么单字母 UDF 名称不能使用 C 或 R?

    我可以编写以下有效的 VBA 函数 Public Function C As Long C 5 End Function Public Function R As Long R 6 End Function 但如果不使用 VBA 项目或模块
  • 为什么将列表作为参数传递比传递生成器性能更好?

    我正在回答这个问题 https stackoverflow com questions 59925390 how to count different elements in list of lists 59925564 noredirec
  • 将点平面分成相等的两半[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 给定一个二维平面 其中有 n 个点 我需要生成一条线的方程 该线将平面分开 使得一侧有 n 2 个点 另一侧有 n 2 个点 我假设这些点
  • Rails - params[:commit] 的目的是什么

    我注意到 每次将 Rails 表单发送到服务器时 提交按钮的名称 通常是按钮上显示的字符串 都会包含在params散列为 提交 例如 最后一个条目 utf8 gt authenticity token gt eZABpBuW7afziDMU
  • 字符串函数如何计算字符串行中的分隔符

    我有一个如下所示的字符串行 A B C D E F G H I J K L M 这意味着分隔符 计数为 12 这条线是有效的 现在假设您有以下行 A B C D E F G H 该行也是有效的 因为它包含 12 个分隔符 其中存在 8 个值
  • Grails 和 SQLite

    尝试让 SQLite 与 grails 一起工作 我在网上找到的东西似乎有点过时 对 ivy 和插件等的引用 但基于这些 http stackoverflow com questions 1199512 grails sqlite http
  • 为什么js字符串中的标签会被验证

    我有以下页面 在我的对象的 someHTML 属性中字符串中的标签 但浏览器将其读取为实际的关闭标记并关闭脚本元素 我在
  • 比较 jQuery 对象

    我正在使用选择器来获取一组对象 0 个或更多 var openMenus Triggers filter trigger hover 然后我有一个事件附加到一个项目 该项目可能位于也可能不位于上面的对象中 在该事件中 我想将触发事件的项目与
  • Rails 3 禁用会话 cookie

    我在 RoR 3 上编写了 RESTful API 我必须使我的应用程序不发送 Set Cookie header 客户端使用 auth token 参数进行授权 我尝试过使用session off and reset session但这没
  • 在应用程序中插入“在 iTunes 上下载”按钮

    我的应用程序显示某首歌曲的标题 我想插入一个 在 iTunes 上下载 按钮 该按钮可以在我的 iPhone 上打开 iTunes 并指向我的歌曲 我已经使用以下命令检索了正确的 iTunes 网址iTunes 链接制作工具 http it
  • ipdb、多线程和自动重新加载程序导致ProgrammingError

    我正在使用 ipdb 调试器在本地调试多线程 Web 应用程序 Django Plone 通常 ipdb 似乎会因为我在调试提示符下时发生的自动重新加载而感到困惑 结果堆栈跟踪出现 Users mikko code xxxx venv li
  • 剧作家 + Django:如何等待事件

    在我的测试中 我必须等待事件触发才能继续测试断言 但我不知道如何让 Playwright 等待该事件 剧作家似乎看不到该事件 django 页面的简单示例 单击按钮会触发事件boop改变文档的背景颜色 模板event html
  • ajax在asp.net中的使用

    我对使用哪种方法有点困惑 1 使用Jquery调用实现订单的HttpHandler页面 2 使用 ICALLBACKEventHandler 阅读更多 http www ajaxmatters com 2006 05 using icall
  • Meteor如何在mongo中保存模板

    我想让我的用户能够创建文档模板 合同 电子邮件等 我想出的最好的选择是将这些文档模板存储在 mongo 中 也许我错了 我已经搜索了几个小时 但我不知道如何使用它们的数据上下文呈现这些文档模板 Example Template stored
  • Jupyter 编辑模式下是否有删除行的快捷方式?

    In Jupyter s edit mode is there a shortcut for deleting a line of text Something like Ctrl L in Visual Studio Shift Dele
  • 如何确保分页 REST API 中的数据完整性?

    我目前正在研究 REST API API返回的资源预计是来自数据库的海量数据 数据库中有数千万行 分页是必须的 以避免将数据写入 HTTP 响应时消耗大量内存 当客户端请求之间数据库中存在删除 添加行时 如何确保数据完整性 例如 page
  • Android 共享首选项的空指针异常

    我试图在共享首选项中保存一个整数值 并在应用程序重新启动时再次加载它 我在我的主要活动中创建了一个共享首选项 并尝试在单击菜单项时在另一个菜单侦听器类中保存整数值 菜单侦听器类位于不同的包中 并且菜单侦听器类扩展了主活动 但是当我尝试这样做