将值存储到服务类FirebaseInstanceIDService中的“共享首选项”中

时间:2018-09-05 05:07:33

标签: android firebase firebase-cloud-messaging sharedpreferences

我正在尝试将用户字符串的类型存储在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();
        }
    });

我现在真的不是我的共享首选项有什么问题吗?

4 个答案:

答案 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();