#android #asynchronous #firebase-realtime-database #android-recyclerview
#Android #асинхронный #firebase-база данных в реальном времени #android-recyclerview
Вопрос:
Я хочу показать список пользователей (используя RecyclerView, адаптер …), список содержит информацию о пользователе (фото, имя, адрес электронной почты ….), а также количество комментариев об этом пользователе, для получения информации о пользователе я сделал запрос firebase, и я получаю всю информацию в видеЯ хочу
al = new ArrayList<>();
FirebaseDatabase.getInstance().getReference().child("Seeker").child(categorie).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// clear data before
al.clear();
for (DataSnapshot dataLoop : dataSnapshot.getChildren()) {
String getcity = dataLoop.child("City").getValue().toString().trim();
if (getcity.equalsIgnoreCase(City.trim())) {
p = new Person();
p.setName(dataLoop.child("Name").getValue(String.class));
p.setId(dataLoop.child("Id").getValue(String.class));
if (dataLoop.hasChild("urlToImage")) {
p.setUrl(dataLoop.child("urlToImage").getValue(String.class));
} else {
p.setImage(R.drawable.profile);
}
readData(new MyCallback() {
@Override
public void onCallback(String value) {
Log.d("TAG", value);
p.setComms(value);
}
}, dataLoop.child("Id").getValue(String.class));
al.add(p);
}
}
md = new MyAdaptor(MyClass.this, al);
rv.setAdapter(md);
}
…
…
public void readData(final MyCallback myCallback, String value) {
database.child("Review").child(value).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dataLoop : dataSnapshot.getChildren()) {
count = dataLoop.getChildrenCount();
Log.d("TAG", "count = " count);
p.setComms(String.valueOf(count));
}
myCallback.onCallback(String.valueOf(count));
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
public interface MyCallback {
void onCallback(String value);
}
моя проблема в том, что я хочу добавить еще одну информацию для каждого пользователя, это количество просмотров для каждого, я попытался сделать еще один запрос внутри цикла, но поскольку вызовы firebase являются асинхронными
, это не работает, макет не показывает количество отзывов.
вот пример моей структуры базы данных Firebase
-Review
-HDGFDGDGDB (user id)
-FSETTDGDG (user who made the review)
-1 : review1
-2 : review2
-Seeker
-HDGFDGDGDB (user id)
-city : "NY"
-name : "Jhon"......
каково наилучшее решение для объединения двух запросов, чтобы отобразить всю информацию в RecyclerView.
Комментарии:
1. Что вы пробовали, что не сработало? Пожалуйста, отредактируйте вопрос, чтобы показать этот код, и объясните, что он делает, а не то, что вы ожидаете.
2. @DougStevenson я отредактировал свой вопрос, надеюсь, теперь все ясно.
3. Из добавленного кода, что именно не работает так, как вы ожидаете?
4. p.setComms(значение); не работает, это значение не отображается в RecyclerView, отображается информация о персонаже, но не это значение комментариев. Я знаю, что проблема в том, что запросы firebase являются асинхронными.