Android应用程序被杀死时如何保持SharedPreferences值

时间:2019-07-10 08:21:40

标签: java android sharedpreferences shared

我正在处理一个android项目。我想在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");

2 个答案:

答案 0 :(得分:0)

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");

答案 1 :(得分:0)

您可以创建这样的共享首选项类:-

    public class AppPrefrences {

            private static SharedPreferences mPrefs;
            private static SharedPreferences.Editor mPrefsEditor;

            public static boolean isUserLoggedOut(Context ctx) {
                mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
                return mPrefs.getBoolean("id_logged_in", true);
            }

            public static void setUserLoggedOut(Context ctx, Boolean value) {
                mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
                mPrefsEditor = mPrefs.edit();
                mPrefsEditor.putBoolean("id_logged_in", value);
                mPrefsEditor.commit();
            }

    public static String getUserName(Context ctx) {
            mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
            return mPrefs.getString("userName", "");
        }

        public static void setUserName(Context ctx, String value) {
            mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
            mPrefsEditor = mPrefs.edit();
            mPrefsEditor.putString("userName", value);
            mPrefsEditor.commit();
        }

public static void clearAllPreferences(Context ctx) {
        mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
        mPrefsEditor = mPrefs.edit();
        mPrefsEditor.clear();
        mPrefsEditor.commit();
    }
        }

,当您登录您的应用程序时,请像下面这样设置值:-

setUserLoggedOut(YourActivity.class, false);

并在启动屏幕上设置如下检查:-

if (isUserLoggedOut(StartActivity.this)) {
                    startActivity(new Intent(StartActivity.this, LoginActivity.class));
                    finish();
                } else {
                    startActivity(new Intent(StartActivity.this, MainActivity.class));
                    finish();
                }