我在从 Firebase 数据库获取数据时遇到问题。 仅当当前用户 ID 存在于参与子文档中时,我才需要收集数据并将其附加到数组中。
这是我试图用来解决的代码。
private DatabaseReference mDB = FirebaseDatabase.getInstance().getReference().child("events");
private FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
private String userid = user.getUid();
mDB.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
try{
for (DataSnapshot chidSnap : dataSnapshot.getChildren()) {
for(DataSnapshot participant : chidSnap.child("participants").getChildren()){
String participantKey = participant.getKey();
Log.d(TAG, "onDataChange: " + participantKey);
String participantId = (String) participant.child(participantKey).getValue();
Log.d(TAG, "onDataChange: " + participantId);
if(participantId.equals(userid)){
mEventKeys.add(chidSnap.getKey()); //displays the key for the node
mEventNames.add((String) chidSnap.child("event_name").getValue());
mEventShortDescriptions.add((String) chidSnap.child("event_name").getValue());
mEventLongDescriptions.add((String) chidSnap.child("event_name").getValue());
mEventCityLocations.add((String) chidSnap.child("event_name").getValue());
mEventDates.add((String) chidSnap.child("event_name").getValue());
mEventHours.add((String) chidSnap.child("event_name").getValue());
}
}
}
}catch (Exception e){
Log.d(TAG, "onDataChange: " + e.toString());
}
initRecyclerView(recyclerView);
}
我正在尝试获取单个参与者的 key (并且我成功地做到了这一点),然后插入下载的 key 以查询该 key 的值。当我尝试获取特定键的值时,我收到一个 Null 值。
你们能帮忙吗?
此外,如果您对如何改进从 Firebase 下载数据有一些建议,我很乐意看到它们!我感觉我的方法不是最佳的。
最佳答案
不需要获取 key 并在引用中使用,您只需循环两次,如以下代码行所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference eventsRef = rootRef.child("events");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
DataSnapshot participantsSnapshot = snapshot.child("participants");
for(DataSnapshot ds : participantsSnapshot.getChildren()) {
String uid = ds.getValue(String.class);
Log.d(TAG, uid);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
eventsRef.addListenerForSingleValueEvent(valueEventListener);
logcat 中的结果将是 participants
数组中存在的所有 uid。
关于java - 使用Java在android studio中查询firebase数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59869720/