Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

firebase запрос на проверку нескольких полей

#android #запрос #firebase


Никак не приходит прозрение касательно того как сделать правильный запрос.
Структура(схематически):

root
{
    autocreatedkey
   {
        user_id1 : true
        user_id2 : true
        mess
        {
            ...
        }
   }
} 


Необходимо написать такой запрос, который бы из множества записей нашел ту где "user_id1"
и "user_id2", такие какие были запрошены(в запросе) и вернул узел "autocreatedkey".
 И нет таких двух узлов у которых бы значения "user_id1" и "user_id2" одновременно
совпадали. "autocreatedkey" - создан автоматически

Все мои попытки приводят либо к тому что я получаю в итоге узел "root" из-за того
что не знаю значения "autocreatedkey", либо что генерится не существующий ключ или
вообще к ошибкам.

Спасибо! 

---UPDATE---

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

Вот код(отрывок) как я решил вопрос:

DatabaseReference mDatabase;
DatabaseReference dRef;
Boolean RoomCreated = false;
//...
 mDatabase.child("root").addListenerForSingleValueEvent(
                new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        Iterable iter =  dataSnapshot.getChildren();
                        for (DataSnapshot it : iter)
                        {
                          if(it.hasChild(mUser.getUid()) && //<---"user_id1"
                                  it.hasChild(FUid ))  //<---"user_id2"
                            {
                                dRef = it.getRef();
                                RoomCreated = true;
                                break;
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });

    


Ответы

Ответ 1



Обходите ветку со значениями и записываете их в коллецию. А уж из коллеции легко вытащить любое значение. mDatabase.getSomeReference().addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { mylisty.clear(); Map newPost = (Map) dataSnapshot.getValue(); for (Map.Entry entry : newPost.entrySet()) { mainID = entry.getKey(); Map newPost4 = (Map) entry.getValue(); for (Map.Entry entry2 : newPost4.entrySet()) { Map properties = (Map) entry.getValue(); strName = properties.get("lowerID1").toString(); strCity = properties.get("lowerID2").toString(); } mylisty.add(new InfoClass(strName,strCity)); } } @Override public void onCancelled(DatabaseError databaseError) { } });

Комментариев нет:

Отправить комментарий