gpt4 book ai didi

java - 使用Java在android studio中查询firebase数据库

转载 作者:行者123 更新时间:2023-12-02 09:05:13 26 4
gpt4 key购买 nike

我在从 Firebase 数据库获取数据时遇到问题。仅当当前用户 ID 存在于参与子文档中时,我才需要收集数据并将其附加到数组中。

请查看数据库结构: Database structure

这是我试图用来解决的代码。

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com