2017-09-11 38 views
0

我正在開發具有以下火力地堡數據庫表中的Android應用:火力地堡equalTo()無法正常工作

"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」到「userId_articleId」如果「userId_articleId」數據庫是值「xUdkl」是這樣的:

.orderByChild("xUdkl").add.... 

但它不能正常工作,如果我如果數據庫中的「userId_articleId」是「xUdklm4VMFa9F」,則將值「xUdklm4VMFa9F」設置爲「userId_articleId」。

orderByChild("xUdklm4VMFa9F").add... 

我不知道爲什麼。它與String的長度有關,還是它只是firebase中的一個bug?任何幫助將不勝感激。

+0

好的,謝謝。但它太奇怪了...... –

+0

我們無法知道'firebaseUser.getUid()+ article.id'是什麼。你能用硬編碼值重現問題嗎?如果是這樣,請更新問題以反映這一點。 –

+0

另請注意,「它無法工作」對問題的描述過於模糊。如果代碼只是打印一個值,我經常會發現它最簡單。然後告訴我們代碼打印的內容,以及您期望它打印的內容。 –

回答

0

我解決了問題...原因是我沒有保持數據新鮮。因此,在我通過ref.keepSynced(true)使用它們之前,我同步了數據。您可以在 Enabling Offline Capabilities on Android中獲得答案。