我有很多活动,并且在我的应用中也有许多方法,每个活动都需要当前的用户信息,例如fristname,lastname,firabase数据库的用户名。为此,我必须每次按以下代码声明变量。
UserRef.child(currentUserID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if(dataSnapshot.exists())
{
String myProfileImage=dataSnapshot.child("username").getValue().toString();
String userfirstname=dataSnapshot.child("firstname").getValue().toString();
String userlastname=dataSnapshot.child("lastname").getValue().toString();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
因此,现在的问题是,是否有任何方法可以在全球范围内声明这三个变量,并且可以在任何活动中使用?
免责声明:
尽管我将要提出的作品,但这是一种粗略的方法。要以正确的方式解决此问题(使用Firebaseuser(,请查看我的其他答案。
您可以使用共享流程解决此问题。简而言之,当用户注册时,您将其细节保存到一个称为共享Preferences的临时存储中。每次需要时,都可以使用最小的代码线来检索它。
要将用户详细信息保存到共享流程中,您可以使用以下方法:
public void saveToSharedPreferences(String firstName, String lastName, String photoUrl) {
// declare your sharedpreferences and editor variables
SharedPreferences sharedPreferences = context.getSharedPreferences("USER", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
// save your values
editor.putString("firstName", firstName);
editor.putString("lastName", lastName);
editor.putString("photoUrl", photoUrl);
// commit your changes
editor.apply();
}
要检索您的值,请使用以下代码行:
SharedPreferences sharedPreferences = context.getSharedPreferences("USER", MODE_PRIVATE);
String firstName = sharedPreferences.getString("firstName", "not found");
String lastName = sharedPreferences.getString("lastName", "not found");
String photoUrl = sharedPreferences.getString("photoUrl", "not found");
请注意,"找不到" 代表您的占位符字符串 案例没有数据可检索。
我希望这会有所帮助。快乐的编码!
您可以使用这样的使用当前的firebase用户:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
您可以使用Firebaseuser类解决问题。它具有很棒的功能,您可以用来存储用户配置文件数据。
用户登录或注册时,从Firebasedatabase获取所需的所有详细信息(FirstName,LastName Photourl(。获得这些值后,将它们传递到以下方法:
public void saveUserData(String firstName, String lastName, String photoUrl) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(firstName + " "+lastName)
.setPhotoUri(Uri.parse(photoUrl))
.build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated..");
}
}
});
}
现在,每当您要检索用户个人资料时,请执行此操作:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
for (UserInfo profile : user.getProviderData()) {
String firstName = profile.getDisplayName().split(" ")[0];
String lastName = profile.getDisplayName().split(" ")[1];
Uri photoUrl = profile.getPhotoUrl();
}
}
我希望这会有所帮助。快乐的编码!
在共享偏好中存储登录的用户信息的最佳方法。您可以根据需要创建AppPreference类,并根据需要设置Getter和Setter。我指的是设置的答案,并获取有用的信息以遵循此链接: - 在关闭应用程序后,请再次登录