#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(); 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
Комментариев нет:
Отправить комментарий