如何在 ondatachanged 之外保存 sharedpreference 变量?
How to save sharedpreference variable outside of ondatachanged?
我正在尝试在登录任务成功后从 firebase 获取用户详细信息。比如用户名、用户电话号码等,所以我想将这些详细信息存储在 sharedpreference 变量中。这样我就可以在整个应用程序中使用这些变量。但是当我尝试从外部保存和访问它时抛出空值。
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
mProgressDialog.dismiss();
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
FirebaseUser user = task.getResult().getUser();
user_tbl.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user1=null;
//Check if user not exist in database
if (dataSnapshot.child(user.getUid()).exists()) {
user1 = dataSnapshot.child(user.getUid()).getValue(User.class);
// user_tbl.removeEventListener(this);
}
editor.putString("username", user1.getUserName());
editor.apply();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
editor.putString("logged", "logged");
editor.putString("email",email);
editor.commit();
将您的 SharedPreferences 设置设为静态,您可以轻松访问任何 activity 和片段之间的任何位置,这将是实现此目的的最佳方式之一
public 静态 SharedPreference 设置;
那就继续使用吧,希望对你有帮助。
查询firebase
是异步操作,所以你必须等待直到操作完成才能获得正确的数据。除此之外,您已经在 onDataChange
之外提交了当前编辑器。因此,您必须在 onDataChange
中再次启动编辑器才能解决问题。检查以下内容:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user1=null;
//Check if user not exist in database
if (dataSnapshot.child(user.getUid()).exists()) {
user1 = dataSnapshot.child(user.getUid()).getValue(User.class);
// user_tbl.removeEventListener(this);
}
SharedPreferences.Editor editor2 = settings.edit();
editor2.putString("username", user1.getUserName());
editor2.apply();
}
我正在尝试在登录任务成功后从 firebase 获取用户详细信息。比如用户名、用户电话号码等,所以我想将这些详细信息存储在 sharedpreference 变量中。这样我就可以在整个应用程序中使用这些变量。但是当我尝试从外部保存和访问它时抛出空值。
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
mProgressDialog.dismiss();
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
FirebaseUser user = task.getResult().getUser();
user_tbl.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user1=null;
//Check if user not exist in database
if (dataSnapshot.child(user.getUid()).exists()) {
user1 = dataSnapshot.child(user.getUid()).getValue(User.class);
// user_tbl.removeEventListener(this);
}
editor.putString("username", user1.getUserName());
editor.apply();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
editor.putString("logged", "logged");
editor.putString("email",email);
editor.commit();
将您的 SharedPreferences 设置设为静态,您可以轻松访问任何 activity 和片段之间的任何位置,这将是实现此目的的最佳方式之一
public 静态 SharedPreference 设置;
那就继续使用吧,希望对你有帮助。
查询firebase
是异步操作,所以你必须等待直到操作完成才能获得正确的数据。除此之外,您已经在 onDataChange
之外提交了当前编辑器。因此,您必须在 onDataChange
中再次启动编辑器才能解决问题。检查以下内容:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user1=null;
//Check if user not exist in database
if (dataSnapshot.child(user.getUid()).exists()) {
user1 = dataSnapshot.child(user.getUid()).getValue(User.class);
// user_tbl.removeEventListener(this);
}
SharedPreferences.Editor editor2 = settings.edit();
editor2.putString("username", user1.getUserName());
editor2.apply();
}