提问人:Hammad Nasir 提问时间:10/16/2017 最后编辑:Hammad Nasir 更新时间:10/29/2017 访问量:412
if 语句在从 Firebase 检索数据时未返回正确的元素
if statement not returning the correct elements on retrieving data from firebase
问:
我有一些数据,看起来像这样: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) {
}
});
}
然后在另一个代码中,我在那里检索 s 并调用方法。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
文件代码如下: https://gist.github.com/HammadNasir/a196bcdc6dccbf69657fca528443e680Profile.java
问题是在 if 语句中,条件是这样的,正如您在数据库中看到的那样,我应该得到 except 和 下的所有 s,因为这两个也存在,但相反,我得到了所有的 s except 和 twice 和 and once。fMethod()
!lID.trim().equals(blackListedId.trim()
uniqueId
child1
uniqueId3
uniqueId7
child2
uniqueId
uniqueId3
uniqueId7
uniqueId3
uniqueId7
另一件需要注意的事情是,当我将该条件设置为 时,我只得到符合此要求的 2 个 id,即,如果下面只有 1 个 id,那么我会得到除了这里的那个之外的所有 s,但有 2 个或更多 id 会导致问题。lID.trim().equals(blackListedId.trim()
uniqueId3
uniqueId7
child2
uniqueId11
uniqueId
我希望你明白我的问题。我尽力用尽可能少的代码来解释它。
为什么返回意外的 id,如何只获取满足此条件的 id?!lID.trim().equals(blackListedId.trim()
答:
子 2 的 addListenerForSingleValueEvent 将始终被调用两次 - 一次是在设置它时,第二次是在它读取所有数据时。因此,当它第一次被调用时,它最终会调用您从孩子 1 获取所有 ID,包括 3 和 7。但下次当它调用它时,它就像你描述的那样做得很好。因此,如果您从孩子身上删除该条件2,我认为它应该可以正常工作。fMethod(fID, "")
"else"
ValueEventListener
如果我理解您的问题并回答了它,请告诉我。如果没有,请随时解释更多细节。
评论
log
else
评论