【问题标题】:getSharedPreferences Activity to FragmentgetSharedPreferences Activity 到 Fragment
【发布时间】:2019-10-26 23:04:01
【问题描述】:

我正在尝试将数据保存在 Activity 上并在 Fragment 上读取。

public void saveData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putString(kekoyaz,mykey );
        editor.apply();


        Toast.makeText(this, "Data saved", Toast.LENGTH_SHORT).show();
    }

在片段上加载数据

public void loadData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        //SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
        String beimtext = sharedPreferences.getString(kekoyaz, "");
        Toast.makeText(getActivity(), "bu"+beimtext, Toast.LENGTH_SHORT).show();
    }

但是 getSharedPreferences 在片段上会变红,建议创建 SharedPreferences 方法。所以我做到了,没有留下任何错误。

private SharedPreferences getSharedPreferences(String sharedPrefs, int modePrivate) {
        return null;
    }

我在运行应用程序时遇到错误。

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.prestige.user, PID: 32516
                  java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference
                      at com.prestige.user.BlankFragment.loadData(BlankFragment.java:1918)
                      at com.prestige.user.BlankFragment.onCreateView(BlankFragment.java:1898)

更新

我删除了这一行

/*private SharedPreferences getSharedPreferences(String sharedPrefs, int modePrivate) {
        return null;
    }*/

我使用你的代码

public void loadData() {
        getActivity().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);    
        String beimtext = sharedPreferences.getString(kekoyaz);
        Toast.makeText(getActivity(), "bu"+beimtext, Toast.LENGTH_SHORT).show();
    }

我添加

private ResourceBundle sharedPreferences;

但我又遇到了错误。

【问题讨论】:

  • getActivity().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE); 试试这个
  • 好吧,当你有一个返回 null 的方法时,你期望什么?
  • 其实当我添加“SharedPreferences sharedPreferences = this.getActivity().getSharedPreferences("sharedPreferences", Context.MODE_PRIVATE);"我没有错误,但我的值没有显示出来。只有文本出现字符串文本“bu”。

标签: java android nullpointerexception


【解决方案1】:

这是因为getSharedPreferences 需要一个上下文。

因此,您可以使用以下内容:

getActivity().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);

【讨论】:

    【解决方案2】:

    更新问题后,您 getSharedPreferences() 使用 Activity 但未分配 sharedPreferences 变量值


    用下面的代码替换你的代码

    public void loadData() {
            sharedPreferences = getActivity().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);    
            String beimtext = sharedPreferences.getString(kekoyaz);
            Toast.makeText(getActivity(), "bu"+beimtext, Toast.LENGTH_SHORT).show();
    }
    

    【讨论】:

    • 答案是正确的。谢谢。只是迷你编辑。 String beimtext = sharedPreferences.getString(kekoyaz,"");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多