如何从非活动类的非活动类获取SharedPreference

时间:2015-02-10 09:12:36

标签: java android android-context

在我的Activity类中,我将一些数据存储在Sharedpreference中。我的非Activity类有getter和setter来读取Sharedpreference数据。我想在另一个Activity类中使用此数据。但我总是得到一个Nullpointer例外。

这是我的Activity类的代码段。

SharedPreferences prefs;

prefs = getActivity().getSharedPreferences(KEY_NAME_FOR_PREF, 0);
        SharedPreferences.Editor editor = prefs.edit();
editor.putString("name", name.getText().toString());
editor.commit();

这是我的第一个非Activity类

private String name;
private Context mContext;

public PdfConsultantContacts(Context context){
    mContext = context;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

这是我的第二个非Activity类。     上下文mContext;     PdfConsultantContacts contact = new PdfConsultantContacts(mContext);

void initContact() {
SharedPreferences prefs =        mContext.getApplicationContext().
getSharedPreferences("app_prefs", 0);
contact.setName(prefs.getString("name", null));
}

当我尝试contact.getName();时,我总是得到一个Nullpointer异常,但我知道SharedPreference已正确保存。

2 个答案:

答案 0 :(得分:2)

使用两个静态方法创建一个类,并在整个应用程序中使用它来存储和检索SharedPreferences中的数据。

public class Utils {    
            public static void putStringInPreferences(Context context, String value, String key, String pKey) {
                SharedPreferences sharedPreferences = context.getSharedPreferences(pKey, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString(key, value);
                editor.commit();
            }

            public static String getStringFromPreferences(Context context,String defaultValue, String key, String pKey) {
                SharedPreferences sharedPreferences = context.getSharedPreferences(pKey, Context.MODE_PRIVATE);
                String temp = sharedPreferences.getString(key, defaultValue);
                return temp;
            }
    }

答案 1 :(得分:0)

  1. 确保您的活动中的“代码段”确实已执行,您可以通过打印一些日志来验证它。

  2. 确保KEY_NAME_FOR_PREF等于“app_prefs”。