我想获取下图中的 sender_uid
值:
这是我下面的代码。我没有得到任何值(value),我也不知道为什么。有人可以解释一下代码有什么问题吗?谢谢!
编辑:我只想要每个家长的最后 sender_uid - 例如:
对于节点
391rfBEXjVUplEW8aoahMtluSmz1_6dTv7oHnWOh55XzRuf9ouZFZkGt2
我只需要来自 LJxvDjdetWz1-DAFVCy 的 sender_uid,不需要来自 LJxvA65WA7MX8aaX5nF 的消息。mDatabase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { List<UsersListGetter> usersList = new ArrayList<>(); recyclerView.setAdapter(new UsersListAdapter(usersList, getApplicationContext())); recyclerView.setAdapter(new UsersListAdapter(null, getApplicationContext())); for (DataSnapshot ch : dataSnapshot.getChildren()) { String senderReceiver[] = ch.getKey().split("_"); if (senderReceiver[0].equals(mAuth.getUid()) || senderReceiver[1].equals(mAuth.getUid())) { Query lastQuery = mDatabase.child(ch.getKey()).orderByKey().limitToLast(1); lastQuery.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String message = dataSnapshot.child("message_body").getValue().toString(); Log.d("MSG", message); } @Override public void onCancelled(DatabaseError databaseError) { //Handle possible errors. } }); } } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } });
最佳答案
您可以通过这种方式从每个节点获取sender_uid
首先创建一个pojo类来获取你想要的数据
public class UserPojo {
private String sender_uid;
public UserPojo() {
}
public String getSender_uid() {
return sender_uid;
}
public void setSender_uid(String sender_uid) {
this.sender_uid = sender_uid;
}
}
然后为每个聊天引用检索它
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<UsersListGetter> usersList = new ArrayList<>();
recyclerView.setAdapter(new UsersListAdapter(usersList, getApplicationContext()));
recyclerView.setAdapter(new UsersListAdapter(null, getApplicationContext()));
for (DataSnapshot ch : dataSnapshot.getChildren()) {
UserPojo up = ch.getValue(UserPojo.class);
String senderUid = up.getSender_uid(); //here you got your sender_uid
Query lastQuery = mDatabase.child(ch.getKey()).orderByKey().limitToLast(1);
lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String message = dataSnapshot.child("message_body").getValue().toString();
Log.d("MSG", message);
}
@Override
public void onCancelled(DatabaseError databaseError) {
//Handle possible errors.
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
关于java - 使用 Firebase 数据库获取每个子项的最后一个子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51861947/