首页 > 解决方案 > Android Firebase - 如何获取子节点数据

问题描述

我有“genresComments”节点,可将每个用户的评论保存到每个视频 ID。它就像流派 -> 视频 ID -> 用户 ID:数据。我想要得到的是所有用户的 id 和他们的数据(我的意思是数据:评论、profilePicture、用户名)。

那就是应该指向该数据的查询

      Query query = FirebaseDatabase.getInstance().getReference(Params.GENRESCOMMENTS).child(genre).child(videoID);

但我确信它只指向“用户 ID”,而不是我需要的内部数据。

我的问题是我如何为每个“视频 ID”获取他的所有“用户 ID”和他的数据(评论、个人资料图片、用户名)。

编辑

     @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    videoID = getArguments().getString(Params.VIDEOID);
    genre = getArguments().getString(Params.GENRE);

    progressBar.setVisibility(View.VISIBLE);

    if(videoID != null){
        Query query = FirebaseDatabase.getInstance().getReference(Params.GENRESCOMMENTS).child(genre).child(videoID);
        options = new FirebaseRecyclerOptions.Builder<Comment>().setQuery(query,Comment.class).build();
        adapter = new FirebaseRecyclerAdapter<Comment,CommentsViewHolder>(options) {
            @Override
            protected void onBindViewHolder(CommentsViewHolder holder, int position, Comment model) {
                    holder.userName.setText(model.getUserName());
                    holder.comment.setText(model.getComment());
                    Glide.with(getContext()).load(model.getUserProfile()).into(holder.userProfile);
            }

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

    }
    if(adapter != null) {
        rvComments.setAdapter(adapter);
        rvComments.setLayoutManager(new LinearLayoutManager(getContext()));
    }

}

我将此查询用于回收站视图

在此处输入图像描述

标签: androidfirebasefirebase-realtime-databasefirebaseui

解决方案


像下面的代码一样(可能会出错):先了解事件监听器

FirebaseDatabase.getInstance().getReference(Params.GENRESCOMMENTS).child(genre).child(videoID).addValueEventListener(new ValueEventListener(Datasnapshot snap){

  for(DataSnapshot s:snap.getChildren()){
         Comment c=s.getValue(Comment.class);
         //c.getPRofilePic  c.getComment();
    }
});


class Comment {
private String comment;
private String profilePic;
private String username;

//getter setter


}

推荐阅读