从RecyclerView获取帖子ID

时间:2019-04-06 16:05:22

标签: java android firebase google-cloud-firestore

我正在尝试使用它,因此当用户点击RecyclerView上的帖子时,我会得到我正在关注CodinginFlows视频的帖子ID,但是当我进入{ {1}}我无法选择使用它

我看着docs,它说该接口已被弃用,我不确定这是指所有接口还是特定接口。

我正在使用Cloud Firestore,这是正确的方法还是正确的方法?

  

摘要

getSnapshot()
  

完整代码(如果需要)

    @SuppressLint("ResourceType")
    public ViewHolder(final View itemView) {

       super(itemView);
       mView = itemView;
       parentLayout = itemView.findViewById(R.id.Main_Blog_Post);

       itemView.setOnClickListener(new View.OnClickListener() {

           @Override
           public void onClick(View view) {

                int position = getAdapterPosition();

                String id = documentSnapshot.getId();
                DocumentReference docRef = db.collection("Posts").document(id);
                String postID = docRef.toString();
                Toast.makeText(mContext,postID,Toast.LENGTH_SHORT).show();

                if (position != RecyclerView.NO_POSITION && listner != null){

                    listner.onItemClick(get);
                }

            }
        });

    }

db

2 个答案:

答案 0 :(得分:0)

虽然对不推荐使用的getSnapshot()方法不是很熟悉,但是可以在最初将帖子添加到数据库时通过将其添加为字段来获取文档参考ID。

例如

 DocumentReference documentReference =  firebaseFirestore.collection("Posts").document();//generate the random blog_id here
    Map<String, Object> postMap = new HashMap<>(); //hashmap do add files to your db
    postMap.put("image_url", image);
    postMap.put("desc", companyName);
    postMap.put("blog_id", documentReference.getId());
    //add the rest of the document here
    documentReference.set(postMap).addOnCompleteListener....

documentReference.getId()将以字符串形式获取您的博客ID,并且您将使用键blog_id将其添加到数据库中

然后,您将需要更新BlogPost模型类,使其Blog_id变量与您已经拥有的变量或描述以及图像url太相同。

然后在onBindViewHolder内的回收站适配器中

String blog_id = blog_list.get(position).getBlog_id();

现在,在字符串上有blog_id,您可以将其传递到任何位置。

答案 1 :(得分:0)

为什么您不赞成使用getSnapshot()方法,因为Snapshots.OpenSnapshotResult接口不是。为了能够获取您要查找的文档的ID,您的适配器类应该扩展FirestoreRecyclerAdapter类。因此,在那种情况下,要获取文档的ID,您当然可以使用getSnapshots()方法,如以下代码行所示:

@Override
protected void onBindViewHolder(@NonNull ProductViewHolder holder, int position, @NonNull YourModelClass yourModelClass) {
    String id = getSnapshots().getSnapshot(position).getId();
}