База данных реального времени Firebase, получает данные из пары ключ-значение - PullRequest
0 голосов
/ 17 ноября 2018

Я создаю свой первый тестовый проект для Android Firebase и сталкиваюсь с проблемой, пытаясь вернуть данные.Вот как мои данные выглядят в консоли:

enter image description here

и мой код для получения возраста и имени:

databaseReference.child("users").child(firebaseUserId).child("profile")
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        Users users = snapshot.getValue(Users.class);

                        Toast.makeText(LoginActivity.this, "Name: " + users.getName() + "\n" +
                                "Gender: " + users.getGender(), Toast.LENGTH_LONG).show();
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

и класс User (POJO) выглядит следующим образом:

public class Users {
String name, gender;

public Users() {
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getGender() {
    return gender;
}

public void setGender(String gender) {
    this.gender = gender;
}
}

Однако я не могу этого сделать, и программа вылетает с этой ошибкой:

com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type project.ibrapptly.com.kcpe_tests_and_quizzes.Users

Как я могувернуть мои данные, или какой самый эффективный способ сделать это?

1 Ответ

0 голосов
/ 17 ноября 2018

Измените это:

databaseReference.child("users").child(firebaseUserId).child("profile")
        .addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Users users = snapshot.getValue(Users.class);

                    Toast.makeText(LoginActivity.this, "Name: " + users.getName() + "\n" +
                            "Gender: " + users.getGender(), Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

на это:

databaseReference.child("users").child(firebaseUserId).child("profile")
        .addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                    Users users = dataSnapshot.getValue(Users.class);

                    Toast.makeText(LoginActivity.this, "Name: " + users.getName() + "\n" +
                            "Gender: " + users.getGender(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

В этом случае вам необходимо удалить цикл for.Когда вы зацикливаетесь, вы извлекаете атрибуты age и name типа String.

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