Как получить уникальный ключ из базы данных Firebase в реальном времени - PullRequest
0 голосов
/ 29 января 2019

Я получаю эту ошибку, которая, как мне кажется, не может прочитать unique key из firebase, поскольку я использую функцию push().На самом деле у него есть 1 уникальный идентификатор от пользователя, а под ним еще один, сгенерированный функцией push.

W / ClassMapper: для класса -LX96YLmx5G_w8yEDTgi не найдено ни одного класса com.official.roomv1.Caller.Advertise NoУстановщик / поле для -LX95gJQNfc9sN81LY3_ найдено в классе com.official.roomv1.Caller.Advertise Не найдено установщика / поле для -LX95T40zIbRfCRmZpFo в классе com.official.roomv1.Caller.Advertise

Это для AndroidПрограммы.Он может читать другие данные, которые не используют уникальный ключ из функции push().

public DatabaseHelper() {
    firebaseDatabase = FirebaseDatabase.getInstance();
    reference = firebaseDatabase.getReference("Property");
}

public void readProperty(final DataStatus dataStatus){
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            property.clear();
            List<String> keys = new ArrayList<>();
            for (DataSnapshot keyNode : dataSnapshot.getChildren()){
                keys.add(keyNode.getKey());
                Advertise advertise = keyNode.getValue(Advertise.class);
                property.add(advertise);
            }
            dataStatus.DataIsLoaded(property,keys);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

}

Вот мой текущий тест базы данных

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Похоже, ваш JSON имеет два вложенных уровня:

  1. UID
  2. идентификатор push

Так что, по сути, у вас, похоже, есть списоксвойств для каждого пользователя.Это означает, что вашему коду нужны два цикла: один для пользователей и один для свойств этого пользователя.

В коде:

public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    property.clear();
    List<String> propertyKeys = new ArrayList<>();
    for (DataSnapshot userSnapshot : dataSnapshot.getChildren()){
        for (DataSnapshot propertySnapshot : userSnapshot.getChildren()){
            propertyKeys.add(propertySnapshot.getKey());
            Advertise advertise = propertySnapshot.getValue(Advertise.class);
            property.add(advertise);
        }
    }
    dataStatus.DataIsLoaded(property, propertyKeys);
}
0 голосов
/ 29 января 2019

Я не вижу, где вы используете push () .Но оттуда вы должны получить свою нажимную клавишу.

Вот способ, которым вы можете получить нажимную клавишу:

String pushID= reference.push().getKey();

И затем вы делаетеобновите здесь:

reference.pushID.addValueEventListener(new ValueEventListener() { ..... }

Вы добавляете push-идентификатор, и у вас есть определенный путь к вашим данным.Надеюсь, вы понимаете.

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