簡體   English   中英

有沒有辦法從我的預定義列表中的屬性具有值的 firebase 實時數據庫中獲取記錄?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM