2016-09-23 5 views
2

Я создал ListView, где он должен отображать все имена пользователей пользователей firebase, которые существуют. Но теперь у меня возникла проблема, что я не знаю, как получить ребенка от userID. Конечно, я могу создать массив с идентификаторами в базе данных, но если в приложении будет зарегистрировано больше людей, не делайте это автоматически. Знаете ли вы, как получить все дети от ребенка? Похоже, что этотFirebase get child of childlist

Root 
    iadf09f08asd0fasd 
     Infos 
     Username: LeagueHans 
    i297f9pb2f92 
     Infos 
     Username: Julian 
    08bfbüqw0efü 
     Infos 
     Username: Markus 

Из комментариев:

DatabaseReference root = FirebaseDatabase.getInstance().getReference(); 
root.child("Users")‌​.child(What to write here).child("Infos").child("Username"); 

Я не знаю, как получить идентификатор пользователя (iadf09f08asd0fasd), как ребенок.

+0

Созданный узел 'Root' или что-то вроде' fir-xxxxxx'? –

+0

DatabaseReference root = FirebaseDatabase.getInstance(). GetReference(). Child («Пользователи»). Child (Что писать здесь) .child («Информация»). Child («Username»); Я не знаю, как получить идентификатор пользователя (iadf09f08asd0fasd) в качестве ребенка –

ответ

0

Попробуйте, как это ...

firebase addValueEventListener получите курок каждый раз, когда ваша база данных переодеваться, так что используйте это, чтобы получить данные.

mReference.child("Root").child("Infos").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) { 

       YourModel mModel = eventSnapshot.getValue(YourModel.class); 
       Log.e("NAME " ,""+ mModel); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

Пожалуйста, объясните, что это делает для будущих новичков, чтобы знать, что это делает. –

+0

Прежде чем начать использовать firebase, если вы собираетесь использовать Firebase, тогда вы должны знать обо всех метод и запрос его. читать документацию для работы, без этого вы никогда не узнаете, как это работает. –

+0

Но новички не будут точно знать, что вы делаете. Вы не можете просто дать код, если то, что вы говорите, правильно, тогда КАЖДЫЙ ответ должен быть просто кодом, независимо от тега, поскольку в вашем случае «Он должен знать методы и запрос этого», что явно неверно. –

2

При запуске запроса в местоположении вы получите подмножество узлов сразу под этим местоположением. Вы не можете получить ниже детей младшего возраста.

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

использовать только имя пользователя

root.child("Users")‌​.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) { 
     String username = snapshot.child("Infos/Username).getValue(String.class); 
    } 
    ... 

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

Альтернатива заключается в следующем:

Используйте модель данных, которая соответствует вашему потребительному случае

Я часто рекомендую в Firebase вы смоделировали экраны приложения. Так что если вы хотите, чтобы отобразить список имен пользователей в вашем приложении, вы должны держать список имен пользователей в базе данных:

Usernames 
    iadf09f08asd0fasd: "LeagueHans" 
    i297f9pb2f92: "Julian" 
    08bfbüqw0efü: "Markus" 

Теперь вы можете получить только имена пользователей с:

root.child("Usernamess")‌​.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) { 
     String username = snapshot.getValue(String.class); 
    } 
    ... 
+0

Wow thank you ! Но знаете ли вы, что я могу отображать имена пользователей из первого метода в FirebaseListAdapter? Потому что его строка:/ –

+0

Это помогло бы, если бы вы поделились своим адаптером в этом случае. : -/Но да, вы можете переопределить 'parseSnapshot()' и просто вернуть имя пользователя там - похожее (хотя и не совсем то же самое) на то, что я сделал здесь: http://stackoverflow.com/a/34561726/209103 , –