我正在尝试将用户字符串的类型存储在Activity的“共享首选项”中,但是当我尝试从服务类中的“共享首选项” getString
进入这种情况时,myFirebaseInstanceIDService会一直给我一个{{1} }错误。
这就是我要重视的地方
Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
和myFirebaseInstanceIDService
中btNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(RegisterTutorActivity.this, ChooseSub.class));
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
sharedPref.edit().putString("Type", "Tutor").apply();
signUpTutor();
}
});
我现在真的不是我的共享首选项有什么问题吗?
答案 0 :(得分:0)
您可以将令牌存储在“共享首选项”中,直到您的应用程序准备使用它为止:
SharedPreferences sharedPref = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.edit().putString("Type", "Tutor");
editor.commit();
signUpTutor();
您可以这样请求令牌:
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("Type", Context.MODE_PRIVATE);
String type = sharedPref.getString("Type", null);
答案 1 :(得分:0)
我简化了一个类,简化了SharedPreferences
操作。我在这里分享它,希望能对您有所帮助。
public class PreferenceUtils {
private SharedPreferences pref;
private SharedPreferences.Editor editor;
public PreferenceUtils(Context context) {
pref = PreferenceManager.getDefaultSharedPreferences(context);
}
public void setPrefrences(String key, String value) {
editor = pref.edit();
editor.putString(key, value);
editor.apply();
}
public void setPrefrences(String key, int value) {
editor = pref.edit();
editor.putInt(key, value);
editor.apply();
}
public void setPrefrences(String key, boolean value) {
editor = pref.edit();
editor.putBoolean(key, value);
editor.apply();
}
public String getPrefrence(String key, String Default) {
return pref.getString(key, Default);
}
public int getPrefrence(String key, int Default) {
return pref.getInt(key, Default);
}
public boolean getPrefrence(String key, boolean Default) {
return pref.getBoolean(key, Default);
}
public void deletePref(String[] key) {
editor = pref.edit();
for (int i = 0; i < key.length; i++)
editor.remove(key[i]);
editor.apply();
}
public void deletePref(String key) {
editor = pref.edit();
editor.remove(key);
editor.apply();
}
}
现在无论您想在哪里使用SharedPreferences
,只需在此处初始化该类即可。
活动
PreferenceUtils utils = new PreferenceUtils(classname.this);
对于片段
PreferenceUtils utils = new PreferenceUtils(getActivity());
服务
PreferenceUtils utils = new PreferenceUtils(getApplicationContext());
现在要保存值,您只需使用PreferenceUtils类的对象
例如您的情况
utils.setPrefrences("Type", "Tutor");
您也可以轻松地通过该对象获得价值,
utils.getPrefrence("Type", null);
快乐编码。
答案 2 :(得分:-1)
好的,所以我感谢大家。我创建了一个MyApplication类,该类扩展了Application并创建了一个getContext方法。现在就可以了。谢谢您的帮助。
答案 3 :(得分:-2)
在共享首选项中写入数据时,使用commit()而不是apply()
sharedPref.edit().putString("Type", "Tutor").commit();