无法使用SharedPreference变量

时间:2015-03-31 07:10:34

标签: java android sharedpreferences

我尝试使用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()函数中

但是有一个问题 该应用程序运行并没有崩溃,但价值仍然没有改变 有什么想法解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

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

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

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

System.out.print(loadSettings);

所以,你必须尝试:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这里有几个问题。

首先,您应该将代码从片段的onCreateView()移动到onActivityCreated(),就像保证Activity的onCreate已经完成一样。< / p>

第二个问题是,虽然这可能有效,但设计很差,让片段直接以这种方式进入并操纵它的父母活动。

Android开发者网站有一篇很好的文章,介绍了如何通过接口在http://developer.android.com/training/basics/fragments/communicating.html

通过接口进行片段与其活动之间的通信

就个人而言,我更喜欢将内容更多地分离,放弃界面,并使用消息总线(例如Otto,EventBus等)。这样,片段完全可重用/可替换,活动和片段都不需要了解彼此之间的具体内容 - 只是他们发出/消费的总线消息。