Возврат только необходимых значений из Firebase - PullRequest
0 голосов
/ 27 мая 2018

Я занимаюсь разработкой приложения Android Messenger.Для этого пользователи регистрируются с номером телефона, который хранится в База данных Firebase Realtime .

Чтобы начать переписываться с кем-либо, пользователь должен иметь в своих контактах других зарегистрированных пользователей в БД.

Для этого у меня есть метод получения контактов с телефона пользователя и зарегистрированных пользователей в БД.

private List<String> getContactsFromFirebase(final MyCallback myCallback){
    FirebaseDatabase.getInstance().getReference().child("Users")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        Users user = snapshot.getValue(Users.class);
                        assert user != null;
                        String contact_found = user.getPhone_number();
                        mContactsFromFirebase.add(contact_found);
                    }
                    myCallback.onCallback(mContactsFromFirebase);
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
    return mContactsFromFirebase;

}

И сравнение пользователей, найденных в БД, с контактами пользователя

private List<String> findSignedUpContacts(Map<String, String> contactsStored, List<String> firebaseNumbers) {

    List<String> values = new ArrayList<>();
    for (String firebaseNumberKey : firebaseNumbers) {
        values.add(contactsStored.get(firebaseNumberKey));
    }
    return values;
}

Теперь я хочу получить из БД Firebase только информацию о числах, сохраненных в списке, созданном выше (числа, совпадающие между БД и контактами), и отобразить результат в FirebaseRecyclerAdapter .

Как я могу это сделать?

Вот моя структура БД.

Users
    5AWIQqYkdoZwFBqM0YrvZiqBj633
        image: "https://firebasestorage.googleapis.com/v0/b/cha..."
        name:  "Plasita"
        phone_number: "+50940404200"
        status: "Coding is my life.."
        thumbnail: "Default"

1 Ответ

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

Извините, в Firebase нет механизма для запроса по списку, вам нужно будет просмотреть список и запросить каждый элемент, что очень неэффективно.Я рекомендую следующее: поскольку вы уже выводите все элементы из узла «Пользователи», сохраните их во вторичной структуре данных и отфильтруйте их.

 for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
      Users user = snapshot.getValue(Users.class);
      assert user != null;
      String contact_found = user.getPhone_number();
      mContactsFromFirebase.add(user);//this data structure now takes users

  }



private List<User> findSignedUpContacts(Map<String, String> contactsStored, List<User> firebaseUsers) {

    List<User> values = new ArrayList<>();
    for (User user : firebaseUsers) {
        if(contactsStored.containsKey(user.getPhone_number()) 
        {
            values.add(user);
        }
    }
    return values;
}

Теперь значения содержат данные о пользователях, которыев сочетании с теми, что в вашем телефоне.

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