Firebase equalTo()无法正常工作

时间:2017-09-11 03:43:57

标签: android firebase firebase-realtime-database

我正在使用以下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中的一个错误?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我解决了问题......原因是我没有保持数据新鲜。所以在我使用ref.keepSynced(true)之前我已经同步了数据。你可以在 Enabling Offline Capabilities on Android得到答案。