不能使用 SharedPreference 变量

Can't use SharedPreference variables

我正在尝试使用 SharedPreferences 保存和检索数据。
数据存储和检索正确,问题是应用程序在使用此数据更改 片段

中的按钮文本时崩溃

onCreateView() 函数

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        SharedPreferences loadSettings = getActivity().getSharedPreferences("app_setts", Context.MODE_PRIVATE);
        Button counterBtn = (Button) getActivity().findViewById(R.id.counterBtn);
        int countInt = loadSettings.getInt("counter",0);
        counterBtn.setText(String.valueOf(countInt));

        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        return rootView;
    }

那么如何使用 SharedPreference 更改开关值
*我在这里搜索过,但都给出了崩溃
对不起英语不好

编辑
我发现我无法通过 MainActivity.java 中的 onCreate() 直接访问片段组件,所以我必须将我的代码放在 onCreateView() 函数中

但是有个问题
应用程序运行并没有崩溃,但值仍然不会改变
有解决这个问题的想法吗??

Logcat 跟踪显示第 62 行抛出 NPE。

boolean onoffSwitch = loadSettings.getBoolean("appOnOff", false);

因此,loadSettings 必须为空。您可以通过以下方式打印:

System.out.print(loadSettings);

所以,你一定要试试:

SharedPreferences loadSettings = getSharedPreferences("pref", Context.MODE_PRIVATE);
...
loadSettings.commit();

您可能会在保存前尝试获取共享偏好值。首先检查您是否在共享首选项中保存了值..

这里有几个问题。

首先,您可能应该将代码从片段的 onCreateView() 移动到 onActivityCreated(),因为那时您可以保证 Activity 的 onCreate 已完成.

第二个问题是,虽然这可能有效,但让片段以这种方式直接进入并操纵它的父级 activity 是糟糕的设计。

Android 开发者网站上有一篇很好的文章,介绍如何通过接口在片段和 activity 之间进行通信,网址为 http://developer.android.com/training/basics/fragments/communicating.html

个人更喜欢解耦,放弃接口,使用消息总线(例如Otto,EventBus等),这样fragments是完全可重用/可替换的,activity 片段也不需要了解彼此的任何具体信息 - 只是它们发出/使用哪些总线消息。