gpt4 book ai didi

android - if 语句在从 firebase 检索数据时未返回正确的元素

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:46 25 4
gpt4 key购买 nike

我在 FirebaseDatabase 中有一些数据,如下所示:

app
-child1
-uniqueId1
-pId1
-lId1
-uniqueId2
-pId2
-lId2
-uniqueId3
-pId3
-lId3
-uniqueId4
-pId4
-lId4
-uniqueId5
-pId5
-lId5
-uniqueId6
-pId6
-lId6
-child2
-uniqueIdA1
-uniqueId7
-uniqueId8
-uniqueId9
-uniqueId10
-uniqueId11
-uniqueId1
-uniqueId2
-uniqueId3
-uniqueId4
-uniqueId5

我正在像这样检索 child1 的数据:

public void fMethod(final String fID, final String blackListedId) {
mDatabase.child("child1").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getValue() != null) {
Profile profile = dataSnapshot.getValue(Profile.class);
String pID = profile.getPID();
String lID = profile.getLID();
if (!pID.trim().equals(AccessToken.getCurrentAccessToken().getUserId().trim())) {
if (pID.trim().equals(fID.trim())) {
if (!lID.trim().equals(blackListedId.trim())) {
// populate the view with elements which meet this condition/requirement

String listingID = profile.getlID();
Log.d("LISTING_IDS", listingID);

} else {
Log.d("dataSnapshot", "null1");
}
} else {
Log.d("dataSnapshot", "null2");
}
} else {
Log.d("dataSnapshot", "null3");
}
} else {
Log.d("dataSnapshot", "null4");
}
}
...
...
...
}

child2 的数据如下:

public void fData(final String fID) {

mDatabase.child("child2").child(AccessToken.getCurrentAccessToken().getUserId()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
String blackListedId = childSnapshot.getValue().toString();
fMethod(fID, blackListedId);
}
} else {
fMethod(fID, "");
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}

然后在另一个代码中,我正在检索 fID 并在那里调用 fData() 方法。

我记录了从数据库中获取的所有 ID:

D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5

这是 Profile.java 文件的代码:https://gist.github.com/HammadNasir/a196bcdc6dccbf69657fca528443e680

问题在于,在 fMethod() 的 if 语句中,条件是 !lID.trim().equals(blackListedId.trim() 所以,正如您可以在数据库中看到,我应该获取 child1 下的所有 uniqueId,除了 uniqueId3uniqueId7 因为这两个是也出现在 child2 中,但我得到了所有 uniqueId,除了 uniqueId3uniqueId7 两次和 uniqueId3uniqueId7 一次。

另一件需要注意的事情是,当我将条件设置为 lID.trim().equals(blackListedId.trim() 时,我只会得到符合此要求的 2 个 ID ,即 uniqueId3uniqueId7 并且如果 child2uniqueId11 下只有 1 个 id 那么我得到所有uniqueIds 除了此处的那个,但有 2 个或更多 id 导致了问题。

希望您能解决我的问题。我尽力用尽可能少的代码来解释它。

为什么 !lID.trim().equals(blackListedId.trim() 会返回意外的 ID,我如何才能只获取满足此条件的 ID?

最佳答案

子项 2 的 addListenerForSingleValueEvent 将始终被调用两次 - 一次是在您设置它时,第二次是在它已读取所有数据时。因此,当它第一次被调用时,它最终会调用 fMethod(fID, "") ,这是您从 Child 1 获取所有 ID 的地方,包括 3 和 7。但是下次调用它时,正如您描述的那样,它运行良好。因此,如果您从 child2 ValueEventListener 中删除 "else" 条件,我认为它应该可以正常工作。

如果我理解并回答了您的问题,请告诉我。如果不是,请随时解释更多细节。

关于android - if 语句在从 firebase 检索数据时未返回正确的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46761756/

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