我正在使用以下Firebase数据库表开发Android应用:
"fav" : {
"-Ktf0tmShJ48-oH76Or3" : {
"article" : {},
"articleId" : "1005",
"id" : 1505034214723,
"userId" : "xUdklm4VMFa9FJvA15XvlIkYKFA3",
"userId_articleId" : "xUdklm4VMFa9FJvA15XvlIkYKFA31005"
},
"-Ktf13BfglsB4sFhHv-P" : {
"article" : {},
"articleId" : "1001",
"id" : 1505034257363,
"userId" : "xUdklm4VMFa9FJvA15XvlIkYKFA3",
"userId_articleId" : "xUdklm4VMFa9FJvA15XvlIkYKFA31001"
}
}
我想查询字符串" userId_articleId"像这样:
FirebaseDatabase.getInstance().getReference().child("fav").orderByChild("userId_articleId").equalTo(firebaseUser.getUid() + article.id)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
for (DataSnapshot data : dataSnapshot.getChildren()){
fav = data.getValue(Fav.class);
favKey = data.getKey();
starItem.setIcon(R.drawable.star);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i("fyales","The dataChanged");
}
});
}
但是我无法获得我想要的对象,最奇怪的是我可以通过键" articleId"来获得我想要的对象。或" id"。如果我给出明确的价值,它也可以起作用" xUdkl" to" userId_articleId"如果" userId_articleId"在数据库中是值" xUdkl"像这样:
.orderByChild("xUdkl").add....
但如果我给出价值" xUdklm4VMFa9F"它就无法运作。 to" userId_articleId"如果" userId_articleId"在数据库中是" xUdklm4VMFa9F"像这样。
orderByChild("xUdklm4VMFa9F").add...
我不知道为什么。它与String的长度有关,或者它只是firebase中的一个错误?任何帮助将不胜感激。
答案 0 :(得分:1)
我解决了问题......原因是我没有保持数据新鲜。所以在我使用ref.keepSynced(true)之前我已经同步了数据。你可以在 Enabling Offline Capabilities on Android得到答案。