首页 > 解决方案 > 如何在 Android 应用程序被杀时保留 SharedPreferences 值

问题描述

我正在做一个安卓项目。我想在 android 应用程序被杀死时推送通知。所以,我正在创建 BroadcastReceiver 和 Service 类。他们在工作。但是,我有一个问题。

这个问题是,当用户登录我的应用程序时;我用 SharedPreferences 来存储这个值。但是,当我杀死应用程序时,这个 SharedPreferences 取“null”值。

java.lang.NullPointerException:尝试在空对象引用上调用接口方法“java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)”

当我搜索时,人们说:“editor.clear();” 但它不起作用。我能做些什么?

我的登录类:

public static SharedPreferences UserDetailsSP,

UserDetailsSP = getSharedPreferences("UserDetails", MODE_PRIVATE);
SharedPreferences.Editor UserDetailsPreferencessEdit = UserDetailsSP .edit();
UserDetailsPreferencessEdit.clear();
UserDetailsPreferencessEdit.putString("UserName", A);
UserDetailsPreferencessEdit.commit();

我用这个调用其他java类:

String a1 = Login.UserDetailsSP.getString("UserName","A");

标签: javaandroidsharedpreferencesshared

解决方案


You this approach create a SessionManager class
public class AppPrefrences {

        private static SharedPreferences mPrefs;
        private static SharedPreferences.Editor mPrefsEditor;
public AppPrefrences(Context context)
{
    int PRIVATE_MODE = 0;
    pref = context.getSharedPreferences("UserDetails", PRIVATE_MODE);
    editor = pref.edit();
    editor.apply();
}

        public static boolean isUserLoggedOut() {

            return mPrefs.getBoolean("id_logged_in", false);
        }

        public static void setUserLoggedOut(Boolean value) {

            mPrefsEditor.putBoolean("id_logged_in", value);
            mPrefsEditor.commit();
        }

public static String getUserName() {

        return mPrefs.getString("userName", "");
    }

    public static void setUserName(String value) {

        mPrefsEditor.putString("userName", value);
        mPrefsEditor.commit();
    }

    public static void clearAllPreferences()
    {

       mPrefsEditor.clear();
       mPrefsEditor.commit();
   }
  }


Inside your activity
AppPrefrences sess = new AppPrefrences(this);
sess.setUserName("A");

推荐阅读