0

我想sender_uid在下图中获取值:

在此处输入图像描述

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

编辑:我只想要每个父母的最后一个 sender_uid - 例如:

  • 对于节点,391rfBEXjVUplEW8aoahMtluSmz1_6dTv7oHnWOh55XzRuf9ouZFZkGt2
    我只需要来自LJxvDjdetWz1 -DAFVCy 的 sender_uid 而不需要来自LJxvA65WA7MX8aaX5nF 的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()) {
                    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) {
    
        }
    });
    
4

2 回答 2

1

您可以通过这种方式从每个节点获取 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) {

        }
    });
于 2018-08-15T17:25:08.023 回答
0

假设该chat节点是您的 Firebase 根的直接子节点,要解决此问题,请使用以下查询:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef
    .child("chat")
    .child(receiver_id + "_" + sender_uid)
    .orderByChild("sender_uid")
    .limitToLast(1);
query.addListenerForSingleValueEvent(/* ... */);
于 2018-08-16T12:27:31.050 回答