Как я могу получить информацию о текущем пользователе с помощью одной декларации? - PullRequest
1 голос
/ 02 июля 2019

У меня много действий, а также у меня много методов в моем приложении, и для каждого действия нужна текущая информация о пользователе, такая как имя, фамилия, имя пользователя из базы данных 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) {

                }
        });

Итак, теперь возникает вопрос: есть ли способ объявить эти три переменные глобально, и их можно использовать в любой деятельности?

Ответы [ 4 ]

1 голос
/ 02 июля 2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:

Хотя подход, который я собираюсь предложить, работает, это грубый подход.Чтобы правильно решить эту проблему (используя FirebaseUser), посмотрите на мой другой ответ .

Вы можете решить эту проблему с помощью 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");

Обратите внимание, что "not found" представляет строку-заполнитель на случай, если нет данных для извлечения.

Надеюсь, это поможет.Веселого кодирования!

1 голос
/ 02 июля 2019

Вы можете использовать класс FirebaseUser для решения вашей проблемы.Он имеет потрясающие функции, которые вы можете использовать для хранения данных профиля пользователя.

Когда пользователь входит в систему или регистрируется, получайте все необходимые данные (firstName, lastName photoUrl) из FirebaseDatabase.Получив эти значения, передайте их следующим способом:

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();
    }
}

Надеюсь, это поможет.Веселого кодирования!

1 голос
/ 02 июля 2019

Лучший способ сохранить зарегистрированную информацию о пользователе в Shared Preference.Вы можете создать класс AppPreference и установить методы получения и установки в соответствии с вашими потребностями.Я имею в виду ответ, чтобы установить и получить полезную информацию, чтобы перейти по этой ссылке: - Запрет пользователей войти снова после закрытия приложения

1 голос
/ 02 июля 2019

Вы можете получить текущего пользователя Firebase, используя это:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...