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