我有很多活动,并且我的应用程序中有很多方法,每个活动都需要最新的用户信息,例如fristname,lastname,firebase数据库中的用户名。为此,我必须每次通过以下代码声明变量。
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) {
}
});
所以,现在的问题是,有没有办法在全局中声明这三个变量,并且可以在任何活动中使用它?
答案 0 :(得分:1)
您可以使用以下方式获取当前的Firebase用户:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
答案 1 :(得分:1)
您可以使用FirebaseUser类来解决您的问题。它具有强大的功能,可用于存储用户个人资料数据。
当用户登录或注册时,请从FirebaseDatabase获取所需的所有详细信息(名字,姓氏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();
}
}
我希望这会有所帮助。快活的编码!
答案 2 :(得分:1)
将登录的用户信息存储在“共享首选项”中的最佳方法。您可以创建AppPreference类,并根据需要设置getter和setter。我指的是设置并获取有用信息的答案,以跟随该链接:-Preventing users to login again after closing the app
答案 3 :(得分:1)
免责声明:
尽管我将建议使用这种方法,但它是一种粗略的方法。要以正确的方式(使用FirebaseUser)解决此问题,请查看my other answer。
您可以使用SharedPreferences解决此问题。简而言之,当用户注册时,您可以将其详细信息保存到名为SharedPreferences的临时存储中。每次需要它时,只需用最少的代码行即可检索它。
要将用户详细信息保存到SharedPreferences中,可以使用以下方法:
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");
请注意,“未找到” 代表您的占位符String 如果没有数据可供检索。
我希望这会有所帮助。快活的编码!