#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) { Iterableiter = 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(); MapnewPost = (Map ) dataSnapshot.getValue(); for (Map.Entry entry : newPost.entrySet()) { mainID = entry.getKey(); Map newPost4 = (Map ) entry.getValue(); for (Map.Entry entry2 : newPost4.entrySet()) { Map
Комментариев нет:
Отправить комментарий