繁体   English   中英

如何从Firebase检索图像和文本到回收视图?

[英]How do I retrieve image and text from firebase into recycle view?

允许用户将图像和文本上传到Firebase。 我想检索它们并将其显示在回收站视图中。 我将如何做一些帮助将不胜感激。

我已经设法将用户图像和文本保存到Firebase,我真正遇到的唯一问题是实际上将其检索并显示在Recycler视图中,我已经设置了Recycler视图并创建了Adapter类,但我不确定该在哪里从这里走。

//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数据库):

然后,您需要在代码中将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 )。

您甚至可以考虑使用更有效的哈希图。 这取决于你。 希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM