[英]Firebase realtime database: Is there a way to get value from different node?
[英]is there any way to fetch records from firebase realtime database whose attribute has a value in my predefined list?
基本上我想要做的是我有一個名稱為users的數據庫,其屬性為username 。 我在一個列表中有一些用戶名,我只想顯示這些用戶的詳細信息,這些用戶的用戶名出現在列表中。 如何編寫查詢以獲取僅在此列表中找到用戶名的用戶的詳細信息? 請注意,沒有字典順序,所以我也不能使用startAt()
和endAt()
函數。
代碼片段:
=> myList 包含用戶名。
此代碼不會產生准確的結果。 任何幫助將非常感激! 謝謝!
FirebaseRecyclerOptions<MainModel> options =
new FirebaseRecyclerOptions.Builder<MainModel>()
.setQuery(FirebaseDatabase.getInstance().getReference().child("users").orderByChild("username")
.startAt(myList.get(0)).endAt(myList.get(myList.size()-1)),MainModel.class).build();
正如評論中已經提到的,Firebase-UI 庫對您的情況沒有幫助,因為它不允許您將多個查詢傳遞給 FirebaseRecyclerOptions 對象。 因此,您需要執行單獨的查詢並使用組合結果。
當您在 Firebase 實時數據庫查詢對象上調用.get()
時,您將獲得一個Task對象。 所以解決這個問題的關鍵是使用whenAllSuccess(Collection> tasks) 。 在您的情況下,它應該如下所示:
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = db.child("users");
Query query = usersRef.orderByChild("username");
List<Task<DataSnapshot>> tasks = new ArrayList<>();
for (String username : myList) {
tasks.add(query.equalTo(username).get());
}
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list.
for (Object object : list) {
MainModel mm = ((DataSnapshot) object).getValue(MainModel.class);
if(mm != null) {
Log.d("TAG", mm.getUsername());
}
}
}
});
假設您的MainModel
類中有一個名為getUsername()
的 getter,則 logcat 中的結果將是所有返回的子項的所有用戶名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.