Общие настройки не перезаписываются одним и тем же ключом? - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть приложение, в котором я сохраняю имя и фамилию пользователя в общих настройках после входа в систему. Оно показывает мне сообщение Toast, которое я установил, чтобы отображать имя и фамилию вошедшего в систему пользователя.

Что странно, это, вероятно, не перезаписывает данные в этих настройках, потому что приложение показывает все ранее вошедшие в систему пользователи, и, что более странно, оно показывает Toast во время другого действия Activity (не там, где установлен Toast), например когда я изменяю некоторые базы данных Firebase вручную.

Я задаюсь вопросом об этом userGuestID ... Android Studio выдала мне ошибку и сказала, что я должен сделать это окончательным, потому что переменная userGuestID доступна из внутреннего класса и должна быть объявлена ​​как final. Это вызывает проблемы?

Ключи

private static final String SHARED_PREFS = "sharedPrefs";
    private static final String USER_FIREBASE_URL = "userFirebaseURL";
    private static final String USER_GUEST_ID = "userGuestID";

Активность, в которой я сохраняю данные пользователя.

public void saveUserData(){

        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS,0);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(USER_FIREBASE_URL,"here I provide the URL to Firebase Database node");
        editor.putInt(USER_GUEST_ID,guestNumber);
        editor.apply();
    }

Так я загружаю данные

public void loadData(){
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS,0);
        String userDataFirebaseURL = sharedPreferences.getString(USER_FIREBASE_URL,"");
        final int userGuestID = sharedPreferences.getInt(USER_GUEST_ID,0);
        try{
            databaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl(userDataFirebaseURL);
        }catch (Exception e) {
        }

Здесь я создаю сообщение Toast.

 databaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    Guest user;
                    try {
                        user = dataSnapshot.child("Guest" + userGuestID).getValue(Guest.class);
                        Toast.makeText(getApplicationContext(), user.getName() + " " + user.getSurname(), Toast.LENGTH_SHORT).show();
                    } catch (NullPointerException e) {

                    }

1 Ответ

0 голосов
/ 19 апреля 2019

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

Класс AppPreference: -

public class AppPrefrences {

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

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

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

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

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

}

теперь установите имя пользователя ифамилия из любой точки вашего проекта, например: -

AppPreference.setUserName(YourActvity.class, "User Name");
AppPreference.setUserSurName(YourActvity.class, "User Surname");

, и получите эти значения следующим образом: -

AppPreference.getUserName(YourActivity.class);
AppPreference.getUserSurName(YourActivity.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...