【发布时间】:2018-09-08 17:22:24
【问题描述】:
我有一个 RecyclerView,它由存储在 Firestore 数据库中的帖子填充。 每个帖子都写成一个具有唯一 postID 的文档,存储发布的消息、时间戳和点赞计数器。
//mUploads is defined as private List<Upload> mUploads;
//Upload object stores post message, timestamp and likes
mUploads = new ArrayList<>();
mFireStoreOrdered = mFireStoreInst.collection("posts").orderBy("time");
mFireStoreOrdered
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot doc : task.getResult()) {
//For each document get the ID
String postID = doc.getId();
// Upload object stores post message, timestamp and likes
Upload upload = doc.toObject(Upload.class).withId(postID);
mUploads.add(upload);
}
Collections.reverse(mUploads);
//Populate Recyclerview
mAdapter = new UploadAdapter(MainActivity.this, mUploads);
mContentView.setAdapter(mAdapter);
} else {
//...
}
}
});
在尝试为这些帖子实现“点赞”功能时,我遇到了 Firestore 的限制,它每秒只能处理一个文档更新。
阅读this article 说服我使用 Firebase 实时数据库通过使用事务操作而不是使用 distributed counters 来存储喜欢。我不想实时显示喜欢,我只想使用 RTDB 来处理每秒多个喜欢/不喜欢。
当另外使用 Firebase RTDB 进行点赞时,我会将数据添加到路径 /posts/postID/likes。
如何从 Firestore 获取帖子消息并将 RTDB 中的相应点赞添加到mUploads,然后再将其传递给适配器。具体来说,是否可以确保我为其对应的帖子设置了正确的类似值,而无需查询每个 postID。
【问题讨论】:
标签: android firebase android-recyclerview google-cloud-firestore