Метод getValue () в Datasnapshot пуст - PullRequest
0 голосов
/ 17 мая 2018

Я боролся с этой проблемой около трех дней. Или, может быть, я не понимаю, кто концепция addValueEventListener(). У меня есть класс POJO.

public class InstantMessage {

    private String UID;
    private String email;
    private String password;
    private String type;

    public InstantMessage() {
    }

    public InstantMessage(String newUID, String newEmail, String newPassword, String newType) {
        UID = newUID;
        email = newEmail;
        password = newPassword;
        type = newType;
    }

    public void setUID(String newUID) {
        UID = UID;
    }

    public void setEmail(String newEmail) {
        email = newEmail;
    }

    public void setPassword(String newPassword) {
        password = newPassword;
    }

    public void setType(String newType) {
        type = newType;
    }

    public String getUID() {
        return UID;
    }

    public String getEmail()
    {
        return email;
    }

    public String getPassword()
    {
        return password;
    }

    public String getType()
    {
        return type;
    }
}

Чего я на самом деле пытаюсь добиться, так это выбрать тип узла из базы данных Firebase. Моя база данных:

mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users");

Я попытался перебрать объект Datasnapshot, но мне все равно не повезло.

Вот что я пытаюсь сделать.

private void showData(){

        mDatabaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                InstantMessage iM1 = dataSnapshot.getValue(InstantMessage.class);
                //System.out.println("The type is:" + iM1.getType());
                sampleUser.add(iM1);
                studentAdapter.notifyDataSetChanged();

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }

Как вы можете видеть в журналах, Datasnapshot получает объект, который я ищу, но значения равны нулю.

enter image description here

enter image description here

Мне очень жаль, если это просто вопрос новичка, но я изо всех сил стараюсь выучить его. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 мая 2018

Вы получаете список всех пользователей (от /Users), а затем пытаетесь отобразить весь результат на один InstantMessage. Это не сработает, поскольку свойства в InstantMessage не существуют прямо в /Users, они на один уровень глубже в вашем JSON.

Чтобы решить эту проблему, вам нужно перебрать дочерние узлы вашего снимка, чтобы получить отдельные сообщения:

mDatabaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
            InstantMessage iM1 = messageSnapshot.getValue(InstantMessage.class);
            sampleUser.add(iM1);
        }
        studentAdapter.notifyDataSetChanged();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...