所以在我的for循环中,我从一个路径中检索值,然后在查询中,我从第一个for循环中使用creatorUid从另一个路径中获取其他字符串。我需要找到一种方法来检索这些字符串并将它们添加到位于第一个for循环中但不是嵌套的for循环中的arraylist中。如果您需要澄清我在说什么,请在下面的代码中添加注释:
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
chatsItemArrayList.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
title = "" + ds.child("title").getValue();
description = "" + ds.child("description").getValue();
date = "" + ds.child("datecreated").getValue();
speaks = "" + ds.child("speaks").getValue();
upvotes = "" + ds.child("upvotes").getValue();
views = "" + ds.child("views").getValue();
picture = "" + ds.child("chatpicture").getValue();
String identifier = "" + ds.child("identifier").getValue();
creatorUid = "" + ds.child("chatcreatoruid").getValue();
System.out.println(creatorUid + " THIS IS THE CREATOR UID");
Query query = FirebaseDatabase.getInstance().getReference().child("Users").orderByKey().equalTo(creatorUid);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
//HOW DO I GET THESE VALUES FROM HERE:
rank = "" + dataSnapshot1.child("rank").getValue();
profilePicture = "" + dataSnapshot1.child("image").getValue();
username = "" + dataSnapshot1.child("username").getValue();
System.out.println("THIS IS THE RANK " + getRankText() + " THE USERNAME " + getUsernameText() + " PROFILEPICTURE " + getProfilePicture());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
System.out.println("R1" + getRankText() + " U1" + getUsernameText() + " P1 " + getProfilePicture());
// TO HERE:
chatsItemArrayList.add(new ChatsItem(getProfilePicture(), title, date, speaks, description, getUsernameText(), getRankText(), upvotes, views, picture));
}
mAdapter = new ChatsFragmentAdapter(chatsItemArrayList);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
答案 0 :(得分:0)
Firebase中的数据仅在onDataChange
方法内部或从那里调用的代码中可用。没有解决方法。
如果需要其他数据库调用来加载其他数据,则应该:
onDataChange
onDataChange
因此,最简单的修复方法是先执行以下操作:
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
rank = "" + dataSnapshot1.child("rank").getValue();
profilePicture = "" + dataSnapshot1.child("image").getValue();
username = "" + dataSnapshot1.child("username").getValue();
chatsItemArrayList.add(new ChatsItem(getProfilePicture(), title, date, speaks, description, getUsernameText(), getRankText(), upvotes, views, picture));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
您通常还希望通过调用onDataChange
之类的内部adapter.notifyDataSetChanged()
方法刷新适配器。
另请参阅: