java - 如何从 firebase 检索图像和文本到回收视图?
问题描述
允许用户将图像和文本上传到 Firebase。我想检索它们并将其显示在回收站视图中。一些关于我将如何做到这一点的帮助将不胜感激。
我已经设法将用户图像和文本保存到 Firebase,我遇到的唯一问题实际上是检索它并在回收器视图中显示它,我已经设置了我的回收器视图并创建了我的适配器类我不知道在哪里从这里走。
//saves user image and description inside Firebase
public void saveToFirebase(){
String userId = mAuth.getCurrentUser().getUid();
userPost = new (selectedImageUri,descriptionEditText.getText().toString());
postDictionary.put("PostImage", userPost.getImage().toString());
postDictionary.put("Description", userPost.getDescription());
productsDatabaseRef.child("Producuts").child(userId).push().setValue(postDictionary);
}
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
Context context;
ArrayList<Post> userPost;
public Adapter(Context context, ArrayList<Post> userPost){
context = context;
userPost = userPost;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.shop_layout_design,viewGroup, false));
}
//this is where you set the value for the ui elements
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
viewHolder.title.setText(userPost.get(i).getDescription());
Picasso.get().load(userPost.get(i).getImage()).into(viewHolder.postImage);
}
@Override
public int getItemCount() {
return userPost.size();
}
//links up ui elements
class ViewHolder extends RecyclerView.ViewHolder{
TextView title;
TextView description;
ImageView postImage;
public ViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.post_title);
description = itemView.findViewById(R.id.post_desc);
postImage = itemView.findViewById(R.id.post_image);
}
}
}
解决方案
这取决于您的实施。如果您有这样的节点组:
主/根(Firebase 数据库):
项目-1
- 图片信息:https ://google.com/picture-url
- 名称信息:“谷歌日志”
...
然后,您需要在代码中将 ValueEventListener 添加到您的数据库类中。从那里使用数据快照,您可以这样做:
ArrayList<String> info = new ArrayList<>();
DatabaseReference reference = database.getReference().child("item-1");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
info.put(childSnapshot.getKey(), childSnapshot.getValue().toString()); //Getting the information of each item.
}
InfoAdapter adapter = new InfoAdapter(stats); //Your adapter
listView.setAdapter(adapter); //Setting the adapter
}
}
然后您可以解析适配器中的信息。通过使用递增 2 的循环(因为我们在数据库中的同一项目上的 arraylist 中有两个信息项),您将能够通过执行 arraylist.get(i) 和 arraylist.get(i + 1 )。
您甚至可以考虑使用更有效的哈希图。这取决于你。希望能帮助到你!
推荐阅读
- apache-spark - 与看似等效的 PySpark 转换实现不同的结果
- smtp - DNN SendGrid 配置不起作用
- python - 初学者问题:RASP PI 4 - Python - IOError
- vue.js - 带有方法的Vue样式
- pine-script - 如何组合振荡器协同工作?
- kubernetes - 如何在 kubernetes 的同一节点中为一项服务(同一 pod 的多个实例)联系一个随机 pod
- node.js - RabbitmQ Producer & Consumer 的设计建议
- c# - C#记录构造函数参数默认值空IEnumerable
- python - Seaborn Countplot set_yticklabels
- ios - 使用预先填充的领域数据库