共享首选项不会用相同的键覆盖吗? [英] Shared Preferences aren't overwriting with the same key?

查看:43
本文介绍了共享首选项不会用相同的键覆盖吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个应用程序,我在登录后将用户的姓名和姓氏存储在共享首选项中.它向我显示了 Toast 消息,我设置为显示登录用户的姓名和姓氏.

I've got an app where I store user's name and surname in Shared Preferences after logging in. It shows me the Toast message which I set to show the name and surname of logged in user.

奇怪的是,它可能不会覆盖这些首选项中的数据,因为该应用程序显示所有早期登录的用户,更奇怪的是它在另一个活动运行期间(不是设置 Toast 的位置)显示 Toast当我手动更改某些 Firebase 数据库时.

What is weird it probably doesn't overwrite the data in those Preferences, because the app shows all earlier logged in users and what is more weird it shows the Toast during another Activity running (not where the Toast is set) for example when I change some of the Firebase Database manually.

我想知道这个 userGuestID...Android Studio 给了我一个错误并说我应该把它设为 final,因为变量 userGuestID 是从内部类中访问的,需要声明为 final.这会导致问题吗?

I am wondering about this userGuestID... the Android Studio gave me an error and said that I should make this final because of variable userGuestID is accessed from within inner class and needs to be declared final. Is this causing a problem?

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) {

                    }

推荐答案

我也在使用共享首选项将用户数据存储在设备中,如果它对您有帮助,请尝试此操作:-

i am also using the shared preference to store the user data in device try this if it helps your :-

AppPreference 类:-

AppPreference class:-

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();
    }

}

现在可以在项目中的任何位置设置用户名和姓氏,如下所示:-

now set the user name and surname from anywhere you want in your project like this :-

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

并像这样获取这些值:-

and get these values like this :-

AppPreference.getUserName(YourActivity.class);
AppPreference.getUserSurName(YourActivity.class);

这篇关于共享首选项不会用相同的键覆盖吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆