片段的getSharedPreferences活动

时间:2019-06-12 12:19:21

标签: java android nullpointerexception

我正在尝试在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;

但是我又遇到一个错误。

2 个答案:

答案 0 :(得分:0)

这是因为getSharedPreferences需要上下文。

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

getActivity().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);

答案 1 :(得分:0)

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

enter image description here


在下面替换您的代码

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