簡體   English   中英

如何監聽 Firebase 數據庫集合的變化?

[英]How to listen to changes in Firebase database collection?

我有以下代碼:

someDocumentRef.collection("data").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {

    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            RelativeLayout emptyLayout = fragmentView.findViewById(R.id.empty_layout);
            if (task.getResult() == null || task.getResult().isEmpty()) {
                emptyLayout.setVisibility(View.VISIBLE);
                rv.setVisibility(View.GONE);
            } else {
                Map<Character,List<QueryDocumentSnapshot>> dataDoc = new HashMap<>();
                for (QueryDocumentSnapshot document : task.getResult()) {
                    char letter = getFirstLetter(document.getString("full_name"));
                    List<QueryDocumentSnapshot> l = dataDoc.get(letter);
                    if (l == null) {
                        l = new ArrayList<>();
                        l.add(document);
                        dataDoc.put(letter, l);
                    } else {
                        l.add(document);
                    }
                }

                // Create recycler view
                emptyLayout.setVisibility(View.GONE);
                rv.setVisibility(View.VISIBLE);
                adapter = new DataAdapter(getActivity(), dataDoc);
                rv.setLayoutManager(new LinearLayoutManager(getActivity()));
                rv.setAdapter(adapter);
            }
        }
    }
});

在我的onCreateView方法(片段)中。 基本上,它從 Firebase 數據庫的集合data中獲取所有文檔,並將其傳遞給適配器以創建回收器視圖。 效果很好,但我的問題是如何監聽數據庫中的變化,一旦插入或刪除了一些新文檔,更新回收器視圖? 請注意,我不使用FirestoreRecyclerAdapter適配器,而是我的自定義適配器。 另外,我正在使用 Firebase 雲數據庫。

你其實可以聽聽firebase的變化,抱歉之前的評論。 我檢查了消防店的文件,我看到了這個

final DocumentReference docRef = 
db.collection("cities").document("SF");
docRef.addSnapshotListener(new 
 EventListener<DocumentSnapshot>() {
  @Override
  public void onEvent(@Nullable DocumentSnapshot 
 snapshot,
                    @Nullable FirebaseFirestoreException e) {
    if (e != null) {
        Log.w(TAG, "Listen failed.", e);
        return;
    }

    if (snapshot != null && snapshot.exists()) {
        Log.d(TAG, "Current data: " + snapshot.getData());
    } else {
        Log.d(TAG, "Current data: null");
      }
   }
 });

引用自https://firebase.google.com/docs/firestore/query-data/listen

我希望它有幫助

編輯收聽整個集合:

    db.collection("cities")
    .addSnapshotListener(new 
     EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot value,
                            @Nullable FirebaseFirestoreException e) 
           {
            if (e != null) {
                Log.w(TAG, "Listen failed.", e);
                return;
            }

            List<String> cities = new ArrayList<>();
            for (QueryDocumentSnapshot doc : value) {
                if (doc.get("name") != null) {
                    cities.add(doc.getString("name"));
                }
            }
            Log.d(TAG, "Current cites in CA: " + cities);
        }
      });

這肯定會聽整個系列。 參考: https://stackoverflow.com/a/48608816/8714139

編輯這個你將如何獲得你的價值觀

        Map<Character,List<QueryDocumentSnapshot>> dataDoc = new HashMap<>();
            for (QueryDocumentSnapshot document : value) {
                char letter = getFirstLetter(document.getString("full_name"));
                List<QueryDocumentSnapshot> l = dataDoc.get(letter);
                if (l == null) {
                    l = new ArrayList<>();
                    l.add(document);
                    dataDoc.put(letter, l);
                } else {
                    l.add(document);
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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