繁体   English   中英

如何实时从数组和firestore数据库中查询存储的用户ID?

[英]How can i query stored user ids from array in the real time and firestore database?

我在我的社交媒体应用程序中同时使用实时数据库和 Firestore,目前仅使用实时数据库来存储用户详细信息和在 Firestore 中发送消息我有一个状态视频集合,其中包含状态视频的详细信息和一个字段存储发布它的用户的 id,在获取状态视频时...获取 id 并将其放入数组中,以便我可以使用每个 id 从实时数据库中获取用户详细信息,挑战在于每次我尝试获取用户的详细信息时,它只在 onBindView 方法中进行一次调用,并且一个视图只接收从实时数据库中获取的名称和个人资料图片的数据......有没有另一种方法可以拨打电话根据数据集的数量,我必须确保为数组中的所有 Id 获取数据?

这是我主要活动的代码:

  private void getStatusVid() {


    database.collection(Constants.KEY_STATUS)
            .limit(25)
            .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull @NotNull Task<QuerySnapshot> task) {
            if(task.isSuccessful()&& task.getResult()!=null){
               for (QueryDocumentSnapshot queryDocumentSnapshot:task.getResult()){

                   mVidsList.add(new StatusVids(queryDocumentSnapshot.getString(Constants.KEY_USER_ID),queryDocumentSnapshot.getString(Constants.KEY_COVER),queryDocumentSnapshot.getString(Constants.KEY_NAME),queryDocumentSnapshot.getString(Constants.KEY_TITLE),""));
                   

               }


                if(mVidsList.size()>0){

                    mRecyclerVids.setAdapter(new StatusVidsAdapter(mVidsList,getActivity()));
                }


            }

        }
    });
}

这是在 onBindView 中执行的代码:

 mRef.child(Constants.KEY_COLLECTION_USERS).child(mList.get(position).userId).addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {

          for(DataSnapshot snappy: snapshot.getChildren()){

          }

              if(snapshot.exists()){

                     final String pictureUrl=snapshot.child("profile").getValue(String.class);

                      Glide.with(context)
                              .load(pictureUrl)
                              .circleCrop()
                              .into(holder.profile);


              }


      }

      @Override
      public void onCancelled(@NonNull @NotNull DatabaseError error) {
          Toast.makeText(context,error.getMessage(),Toast.LENGTH_SHORT).show();
      }
  });

简而言之,我要避免在每个状态视频文档中不断地放置用户的个人资料图像和名称,因为它们是用户更新图像的时间,并且状态视频中的图像会过时。

在这种情况下,您应该更新所有视频中的名称和图像。 确实,这可能会有些昂贵,因为您需要在每个存在的地方更新这些值,但是当您将它们保存在那里时,这是一个要求。

另一种解决方案是只保留指向用户配置文件的引用,在这种情况下,您需要创建另一个数据库调用,以便显示用户数据。

因此,这始终是一种交易,因此您需要计算出哪种解决方案最适合您。

暂无
暂无

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

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