java - 使用 Firebase 数据库获取每个子项的最后一个子项

标签 java android firebase firebase-realtime-database

我想获取下图中的 sender_uid 值:

enter image description here

这是我下面的代码。我没有得到任何值(value),我也不知道为什么。有人可以解释一下代码有什么问题吗?谢谢!

编辑:我只想要每个家长的最后 sender_uid - 例如:

  • 对于节点391rfBEXjVUplEW8aoahMtluSmz1_6dTv7oHnWOh55XzRuf9ouZFZkGt2
    我只需要来自 LJxvDjdetWz1-DAFVCysender_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/

相关文章:

修改列表时出现java.util.ConcurrentModificationException

android - 从 Android 中的 strings.xml 加载时出现空指针异常

android - Facebook SDK Android : OnSuccess called but OnCancel not called

ios - Firebase 添加 iOS 应用程序错误 - 处理请求时出现未知错误。再试一次

reactjs - React NextJS Firebase 报错刷新 Firebase App named '[DEFAULT]' already exists

java - 在android中以编程方式添加到布局中时如何从许多EditText中获取数据

java - 不接受转义字符的转义(Java 和 MySQL)

android - 更改时间强制关闭 : Time Picker (NPE)

Firebase:如何构建公共(public)/私有(private)用户数据

java - 写入 OutputStream 时测量中间吞吐量 [或] 为什么 write() 会阻塞,而 read() 不会?