我有一个应用程序,登录后将用户的名称和姓氏存储在“共享首选项”中。它向我显示Toast消息,该消息设置为显示登录用户的名称和姓氏。
奇怪的是,它可能不会覆盖那些“首选项”中的数据,因为该应用程序显示了所有较早登录的用户,而更奇怪的是,它在另一个Activity运行期间(而不是在设置Toast的情况下)显示了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) {
}
答案 0 :(得分:0)
我还使用共享首选项将用户数据存储在设备中,如果可以帮助您,请尝试以下操作:-
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);