Java 无法使用SharedReference变量

Java 无法使用SharedReference变量,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在尝试使用SharedReferences保存和检索数据。正确存储和检索数据,问题是应用程序在使用此数据更改片段中的按钮文本时崩溃 onCreateView函数 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { SharedPreferences loadSett

我正在尝试使用SharedReferences保存和检索数据。正确存储和检索数据,问题是应用程序在使用此数据更改片段中的按钮文本时崩溃

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;
    }
那么如何使用SharedReference更改开关值呢 *我已经在这里搜索过了,但都给撞车了 对不起,英语不好

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

但有一个问题 应用程序运行且未崩溃,但值仍不会更改
解决这个问题的方法是什么?

Logcat跟踪显示第62行抛出一个NPE

boolean onoffSwitch = loadSettings.getBoolean("appOnOff", false);
因此,loadSettings必须为null。您可以通过以下方式打印:

System.out.print(loadSettings);
因此,您必须尝试:

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

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

这里有几个问题

首先,您可能应该将代码从片段的onCreateView移动到onActivityCreated,因为此时您可以保证活动的onCreate已经完成

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

Android开发者网站上有一篇关于如何通过接口在片段和它的活动之间进行通信的好文章


就我个人而言,我更喜欢将事物解耦,放弃接口,并使用消息总线,例如Otto、EventBus等。这样,片段完全可重用/可替换,而且活动和片段都不需要知道彼此的任何特定信息——它们发出/使用的总线消息。

但all gives crash的确切含义是什么?例外?如果是这样,请向我们展示stacktrace。我的意思是,我所遵循的所有方法都会使用MODE_PRIVATE一次性提供crashtry。。。。。。。。。。。SharedReferences首选项=GetSharedReferencesPref,Context.MODE\u PRIVATE;请发布整个onCreate和loadSettings函数。是否可以发布整个类它们被正确保存和检索,因为Toast.makeText显示保存的首选项,但无法用于更改片段组件属性使用onCreateView而不是onCreate解决了问题是setText没有更改按钮text问题解决了,是的,是关于将片段连接到主要活动,谢谢大家。。。