在以下友元请求的JSON结构中,"LONiSEYOArTUAYF2CJ2zf6EzpqC"是当前用户ID。它具有他已接收请求或已向其发送请求的用户的嵌套用户 ID。现在我想获取所有嵌套用户的 userId,这些用户在 Android 中向当前用户发送了 ID 为"LONiSEYOArTUAYF2CJ2zf6EzpqC"的请求。
我已经在安卓中尝试了以下代码。
Database Reference mRequestDatabase = FirebaseDatabase.getInstance().getReference().child("Requests").child(currentUserId);
Query query =
mRequestDatabase.orderByChild("request_type").equalTo("received");
但是此查询不起作用,因为数据库引用是currentUserId
。如何遍历当前用户 ID 下的所有用户并检查哪些用户具有 request_type = "已接收"?
{
"Requests" : {
"LONiSEYOArTUAYF2CJ2zf6EzpqC":{
"anicGIuuLSQndxMKI8ieZDhMHOP":{
"request_type" : "received"
},
"TIh83WLasxYxLxJmUh619imfnrd" :{
"request_type" : "received"
}
}
,
"LioCIXTY8_Cgii2TtHb" : {
"NthWyK6XoLdAOZCdmkJXIGS3YuR2" : {
"request_type" : "received"
}
}
,
"91cGZGssoTQOoepy" :{
"NthWyK6XoLdAOZCdmkJXIGS3YuR2" : {
"request_type" : "send"
}
}
}
}
您的查询似乎很好。如果要获取当前用户request_type
等于"received"
的请求的密钥,可以按如下方式获取密钥:
DatabaseReference requestDatabase = FirebaseDatabase.getInstance().getReference()
.child("Requests")
.child(currentUserId);
final List<String> senderUserIds = new ArrayList();
requestDatabase.orderByChild("request_type").equalTo("received")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot requestSnapshot : dataSnapshot.getChildren()) {
senderUserIds.add(requestSnapshot.getKey());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
建议
如果您能够更改数据库的结构,则可以像这样将其展平:
{
"Requests": {
"request_id_1": {
"sender_user_id": "user_1",
"recipient_user_id": "user_2"
}
}
}
然后,您可以按如下方式查询:
DatabaseReference requestsRef = FirebaseDatabase.getInstance().getReference().child("Requests");
final List<String> senderUserIds = new ArrayList();
requestsDatabase.orderByChild("recipient_user_id").equalTo(currentUserId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot itemSnapshot : dataSnapshot.getChildren()) {
Request request = itemSnapshot.getValue(Request.class);
senderUserIds.add(request.getSenderUserId());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
这是Request
类:
public class Request {
private String senderUserId;
private String recipientUserId;
Request() {
// Default constructor required for calls to DataSnapshot.getValue(Request.class)
}
Request(String senderUserId, String recipientUserId) {
this.senderUserId = senderUserId;
this.recipientUserId = recipientUserId;
}
public String getSenderUserId() {
return senderUserId;
}
public void setSenderUserId(String senderUserId) {
this.senderUserId = senderUserId;
}
public String getRecipientUserId() {
return recipientUserId;
}
public void setRecipientUserId(String recipientUserId) {
this.recipientUserId = recipientUserId;
}
}