获取两个活动之间的SharedPreference

时间:2015-11-05 09:51:41

标签: java android sharedpreferences

我在MainActivity.Java中从ContactView.Java读取SharedPreference时遇到了麻烦

这是我在ContactView.Java中的内容:

SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString("contactName", name);
        editor.putString("contactPhone", phoneNo);
        editor.commit();

并在我的OnCreate中将它们设置为TextViews:

SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
    String name = settings.getString("contactName", "");
    //the second parameter set a default data if “contactName” is empty
    if (!name.isEmpty()){
        textView1.setText(name);
    }
    String phoneNo = settings.getString("contactPhone", "");//the second parameter set a default data if “contactName” is empty
    if (!phoneNo.isEmpty()){
        textView2.setText(phoneNo);
    }

现在,当我去MainActivity时,我想阅读它们:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String phoneNo =  sharedPreferences.getString("contactPhone", "");
String name =  sharedPreferences.getString("contactName", "");

但是Strings似乎是空的,不包含任何名字或电话没有我做错了什么?

4 个答案:

答案 0 :(得分:3)

您正在访问2个不同的SharedPreferences文件。

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

不同
SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);

使用

PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

随处可见。

答案 1 :(得分:2)

在您的MainActivity中,您应该使用相同的首选项文件:

SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
String phoneNo =  settings.getString("contactPhone", "");
String name =  settings.getString("contactName", "");

答案 2 :(得分:1)

在两个活动A和B中,您可以通过以下方式使用共享首选项。

在活动A中,您可以创建共享首选项

SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString("contactName", name);
        editor.putString("contactPhone", phoneNo);
        editor.commit();

在活动B中,您可以使用具有相同名称的共享首选项

SharedPreferences settings = getSharedPreferences("SelectedContact", MODE_PRIVATE);
 String phoneNo =  settings .getString("contactPhone", "");
String name =  settings .getString("contactName", "");

答案 3 :(得分:0)

1-您可以非常轻松地创建自定义类,以便在SharedPreference中添加,检索,检查和删除数据。

public class Pref_Storage {
    private static SharedPreferences sharedPreferences = null;

    public static void openPref(Context context) {
        sharedPreferences = context.getSharedPreferences(context.getResources().getString(R.string.app_name),
                Context.MODE_PRIVATE);
    }

    public static void deleteKey(Context context, String key) {
        HashMap<String, String> result = new HashMap<String, String>();

        Pref_Storage.openPref(context);
        for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll()
                .entrySet()) {
            result.put(entry.getKey(), (String) entry.getValue());
        }

        boolean b = result.containsKey(key);
        if (b) {
            Pref_Storage.openPref(context);
            Editor prefsPrivateEditor = Pref_Storage.sharedPreferences.edit();
            prefsPrivateEditor.remove(key);

            prefsPrivateEditor.commit();
            prefsPrivateEditor = null;
            Pref_Storage.sharedPreferences = null;
        }
    }

    public static void setDetail(Context context, String key, String value) {
        Pref_Storage.openPref(context);
        Editor prefsPrivateEditor = Pref_Storage.sharedPreferences.edit();
        prefsPrivateEditor.putString(key, value);

        prefsPrivateEditor.commit();
        prefsPrivateEditor = null;
        Pref_Storage.sharedPreferences = null;
    }

    public static Boolean checkDetail(Context context, String key) {
        HashMap<String, String> result = new HashMap<String, String>();

        Pref_Storage.openPref(context);
        for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll()
                .entrySet()) {
            result.put(entry.getKey(), (String) entry.getValue());
        }

        boolean b = result.containsKey(key);
        return b;
    }

    public static String getDetail(Context context, String key) {
        HashMap<String, String> result = new HashMap<String, String>();

        Pref_Storage.openPref(context);
        for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll()
                .entrySet()) {
            result.put(entry.getKey(), (String) entry.getValue());
        }

        String b = result.get(key);
        return b;

    }
}

对于设定数据:

Pref_Storage.setDetail(context, "contactName", name);
Pref_Storage.setDetail(context, "phoneNo", phoneNo);

用于检索数据:

Pref_Storage.getDetail(context, "contactName");
Pref_Storage.getDetail(context, "phoneNo");

用于检查数据:

Pref_Storage.checkDetail(context, "contactName");
Pref_Storage.checkDetail(context, "phoneNo");

删除数据:

Pref_Storage.deleteKey(context, "contactName");
Pref_Storage.deleteKey(context, "phoneNo");