如何通过单声明获取当前的用户信息



我有很多活动,并且在我的应用中也有许多方法,每个活动都需要当前的用户信息,例如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。我指的是设置的答案,并获取有用的信息以遵循此链接: - 在关闭应用程序后,请再次登录

最新更新