首页 > 解决方案 > 在 Firestore 中显示用户的照片

问题描述

我正在编写一个显示餐厅和用户评论的应用程序。

我想显示评论,我有usernamecomment和。dateuser_photo

在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

第一个问题是我应该在审阅文档中保存 username 还是 userId ?

第二个问题是如何显示用户的照片?我不能将它作为 URL 存储在文档中。

因为如果用户更改照片,它不会在审阅文档中更改。请注意,用户的照片存储在 Firestore 存储中。

解决此问题的最佳做法是什么?

AdapterReview.java

public class AdapterReview extends FirestoreRecyclerAdapter<ReviewModel, HolderReviews>{

public AdapterReview(@NonNull FirestoreRecyclerOptions<ReviewModel> options) {
    super(options);
}
@Override
protected void onBindViewHolder(@NonNull HolderReviews holder, int i, @NonNull ReviewModel reviewObject) {
    holder.usernameTextView.setText(reviewObject.getUsername());
    holder.dateTextView.setText(reviewObject.getDate());
    holder.commentTextView.setText(reviewObject.getComment());
    holder.photoImageView.setImageURI(???);
}

@NonNull
@Override
public HolderReviews onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_adapter, parent, false);
    return new HolderReviews(view);
}
}

这个在 MainActivity.java 中创建 firestore recyclerview 的方法

  private void fireStoreRecyclerViews( ) {
    Query query = db.collection("reviews");

    FirestoreRecyclerOptions<ReviewModel> options = new FirestoreRecyclerOptions.Builder<ReviewModel>()
            .setQuery(query, ReviewModel.class)
            .build();

    adapterReview = new AdapterReview(options);
    RecyclerView recyclerView = view.findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this);
    recyclerView.setAdapter(adapterReview);

}

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


第一个问题是我应该在审阅文档中保存用户名还是 userId 吗?

绝对是uid, since 是独一无二的。在用户名的情况下,它最终可能会发生冲突并尝试使用相同的用户名编写两个文档。

第二个问题是如何显示用户的照片?我不能将它作为 URL 存储在文档中。

在大多数情况下,我们使用的库可以帮助我们将图像设置为视图。为此,我建议您Glide。正如我在您的数据库中看到的那样,您已经将“照片”网址存储在文档中,这是一种正确的方法。

添加Glide依赖项后,请更改以下代码行:

holder.photoImageView.setImageURI(???);

Glide.with(context).load(reviewObject.getPhoto()).into(holder.photoImageView);

推荐阅读