Как сохранить значения SharedPreferences, когда приложение для Android убито - PullRequest
0 голосов
/ 10 июля 2019

Я работаю над проектом Android.Я хочу нажать уведомление, когда приложение Android убит.Итак, я создаю BroadcastReceiver и класс обслуживания.Они работают.Но у меня есть проблема.

Эта проблема возникает, когда пользователь входит в мое приложение;Я очищаю эти значения с SharedPreferences.Но, когда я убил приложение, эта SharedPreferences принимает значение «ноль».

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 голосов
/ 10 июля 2019

вы можете создать общий класс предпочтений следующим образом: -

    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();
                }
0 голосов
/ 10 июля 2019
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");
...