Не удается получить данные пользователя из формы Firebase - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть следующая структура Firebase:

Users" : {
"angelbreath" : {
      "PvP_Wins" : 0,
      "PvP_scores" : 0,
      "avatar" : "https://i.imgur.com/qp9gnKE.png",
      "gender" : "Male",
      "userName" : "angelbreath",
      "user_class" : "Bard",
      "user_id" : "sC8JGw6SvMUGH4Id1HwcSf6Sl5n1"
    },  

Я пытаюсь получить данные текущего пользователя авторизации без удачи из-за нулевого исключения.После многих попыток у меня получился следующий код:

private void showData() {
            DatabaseReference Users = database.getReference("Users");
            final Query userQuery = Users.orderByChild("user_id");
            final FirebaseUser user = firebaseAuth.getCurrentUser();

            userQuery.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot post : dataSnapshot.getChildren() ){
                        if(post.child("user_id").getValue().equals(user.getUid())){
                            Log.d("Output", "Found");
                            Log.d("Output", post.getKey().toString());

                            userClass.setText(post.child("user_class").getValue().toString());
                            userGender.setText(post.child("gender").getValue().toString());
                        }else{
                            Log.d("Output", "Failure");
                        }

                        Log.d("Output", post.child("user_id").toString());
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

Как я могу понять, потому что я новичок в firebase, у меня правильная ссылка и я запрашиваю правильный путь.Я не могу понять, почему я получаю исключение.На всякий случай у меня тоже есть следующая проверка:

//Checking whether a user as already Logged In
        if(firebaseAuth.getCurrentUser()==null){
            finish();
            //Starting the User Login Activity if the user is not Logged in
            startActivity(new Intent(this,MainActivity.class));
        }

Так что я думаю, что у меня есть текущий пользователь и его идентификатор, поэтому я запрашиваю пользователей с идентификатором пользователя.Что случилось?

Я буду признателен за любую помощь!

РЕДАКТИРОВАТЬ журнал ошибок:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String eu.healthydev.quizhero.Model.User.getUserName()' on a null object reference
        at eu.healthydev.quizhero.UserProfile$1.onDataChange(UserProfile.java:88)
        at com.google.firebase.database.obfuscated.zzap.zza(com.google.firebase:firebase-database@@16.0.2:75)
        at com.google.firebase.database.obfuscated.zzca.zza(com.google.firebase:firebase-database@@16.0.2:63)
        at com.google.firebase.database.obfuscated.zzcd$1.run(com.google.firebase:firebase-database@@16.0.2:55)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)

Java: 88

if(post.child("user_id").getValue().equals(user.getUid())){

Модель пользователя:

public class User {

    int PvP_wins, PvP_score;
    private String user_class, user_gender, userName;
    private String avatar, userid;

    public User() {
    }

    public User(int pvP_wins, int pvP_score, String user_class, String user_gender, String userName, String avatar, String userid) {
        PvP_wins = pvP_wins;
        PvP_score = pvP_score;
        this.user_class = user_class;
        this.user_gender = user_gender;
        this.userName = userName;
        this.avatar = avatar;
        this.userid = userid;
    }

    public int getPvP_wins() {
        return PvP_wins;
    }

    public void setPvP_wins(int pvP_wins) {
        PvP_wins = pvP_wins;
    }

    public int getPvP_score() {
        return PvP_score;
    }

    public void setPvP_score(int pvP_score) {
        PvP_score = pvP_score;
    }

    public String getUser_class() {
        return user_class;
    }

    public void setUser_class(String user_class) {
        this.user_class = user_class;
    }

    public String getUser_gender() {
        return user_gender;
    }

    public void setUser_gender(String user_gender) {
        this.user_gender = user_gender;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

проблема в том, что метод UserProfile.onDataChange() имеет user, который NULL.

трудно сказать больше, если только он не видел класс UserProfile - и как он создается.

, хотя вы можете инициализировать поля по-другому (это ничего не исправит, но предотвратит NPE):

private String userName = "";
private String userid = "";
0 голосов
/ 25 сентября 2018

Размещение точки "."после firebaseAuth.getCurrentUser() автоматически покажет, какие методы доступны для получения данных текущего пользователя, и нет необходимости получать такие данные с помощью Listener, если вы хотите получить только uid. (В данном случае)

Например:

FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null) {
    String uid = firebaseUser.getUid();

    Log.d("Tag" + uid)
}

Кроме того, после размещения точки, вероятно, будут показаны другие элементы в текущем узле для извлечения.Дело в том, что я на самом деле не вижу причины использования Слушателя здесь, когда вы можете получить эти элементы так же, как приведенный выше код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...