【发布时间】:2020-03-22 15:32:43
【问题描述】:
我在 Cloud Firestore 中有 2 个不同的集合:
-
帐户(标识符:userId)
- 用户名
- 图片网址
-
帖子(标识符:id)
- 用户ID
- 文字
- 喜欢
目标:我想将这两个集合放在 Fragment 中,并使用 Androidx RecyclerView 来显示带有用户名和图片 URL 的帖子。
我在 build.gradle 中使用了“androidx.recyclerview:recyclerview:1.1.0”。
我使用以下方法从 Firebase 获取帖子并将它们存储在模型“FirebasePost”中:
/**
* Get all FirebasePost objects from Firebase Firestore collection
* @return
*/
public FirestoreRecyclerOptions<FirebasePost> getPosts() {
Query mQuery = mFirestore.collection("posts").orderBy("createdAt", Query.Direction.DESCENDING);
// Get the response elements
FirestoreRecyclerOptions<FirebasePost> response = new FirestoreRecyclerOptions.Builder<FirebasePost>()
.setQuery(mQuery, FirebasePost.class)
.build();
return response;
}
我通过以下代码填充 RecyclerView:
/**
* Prepares the Recycler View for showing the Posts data
* @param mView Gets the current view
*/
private void prepareRecyclerView(View mView, FirestoreRecyclerOptions<FirebasePost> response) {
adapter = new FirestoreRecyclerAdapter<FirebasePost, PostHolder>(response) {
@Override
public void onBindViewHolder(@NonNull PostHolder holder, int position, @NonNull FirebasePost model) {
// Bind the FirebasePost object to the PostHolder
holder.setPostText_to_UI(model.getText());
holder.setTimestamp_to_UI(model.getCreatedAt());
holder.setAuthorDisplayName_to_UI(model.getAuthorUserId());
}
@NonNull
@Override
public PostHolder onCreateViewHolder(@NonNull ViewGroup group, int i) {
// Create a new instance of the ViewHolder, in this case we are using a custom
// layout called R.layout.message for each item
View view = LayoutInflater.from(group.getContext())
.inflate(R.layout.posts_item_cardview, group, false);
return new PostHolder(view);
}
};
mPostsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mPostsRecyclerView.setItemAnimator(new DefaultItemAnimator());
mPostsRecyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
如何向 Firebase 执行第二个请求以获取用户信息并将其添加到 RecyclerView 的正确位置?
问题是,我得到 AuthorUserId 而不是用户的 displayName,因为在将模型提供给 RecyclerView 之前,我无法对 Firestore 执行另一个请求。
【问题讨论】:
标签: java android firebase android-recyclerview google-cloud-firestore