Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase回收器查看重复数据_Java_Android_Firebase_Firebase Realtime Database_Firebaseui - Fatal编程技术网

Java Firebase回收器查看重复数据

Java Firebase回收器查看重复数据,java,android,firebase,firebase-realtime-database,firebaseui,Java,Android,Firebase,Firebase Realtime Database,Firebaseui,我试图从数据库中检索注释,但它将所有注释显示为重复 同样的listner可以很好地处理片段,但在活动上实现时会出现重复项错误 private void startListening() { Query query = mCommentsDatabase; FirebaseRecyclerOptions<Comment> options = new FirebaseRecyclerOptions.Builder<Comment>()

我试图从数据库中检索注释,但它将所有注释显示为重复

同样的listner可以很好地处理片段,但在活动上实现时会出现重复项错误

private void startListening() {
    Query query = mCommentsDatabase;

    FirebaseRecyclerOptions<Comment> options =
            new FirebaseRecyclerOptions.Builder<Comment>()
                    .setQuery(query, Comment.class)
                    .build();

    FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Comment, CommentsViewHolder>(options){
        @Override
        public CommentsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            // Create a new instance of the ViewHolder, in this case we are using a custom
            // layout called R.layout.message for each item
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.single_comment_item, parent, false);
            return new CommentsViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(final CommentsViewHolder holder, int position, final Comment model) {

            mCommentsDatabase.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                    if (dataSnapshot.exists() && dataSnapshot != null){
                            if (dataSnapshot.exists()){
                                String CommenterId = dataSnapshot.child("uid").getValue().toString();
                                mUsersDatabase.child(CommenterId).addValueEventListener(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(@NonNull DataSnapshot userDataSnapshot) {
                                        if (userDataSnapshot.exists()){
                                            String username = userDataSnapshot.child("username").getValue().toString();
                                            String thumbImage = userDataSnapshot.child("profile_thumbnail").getValue().toString();
                                            String comment = dataSnapshot.child("body").getValue().toString();
                                            Long timestamp = Long.parseLong(dataSnapshot.child("timestamp").getValue().toString());
                                            GetTimeAgo getTimeAgo = new GetTimeAgo();
                                            String time  = getTimeAgo.getTimeAgo(timestamp, getApplicationContext());

                                            holder.setName(username);
                                            holder.setComment(comment);
                                            holder.setImage(thumbImage, getApplicationContext());
                                            holder.setTime(time);
                                        }
                                    }

                                    @Override
                                    public void onCancelled(@NonNull DatabaseError databaseError) {

                                    }
                                });
                            }
                    }

                }

                @Override
                public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                }

                @Override
                public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });

        }

    };

    mCommentsList.setAdapter(adapter);
    adapter.startListening();
}
private void startListening(){
Query Query=mCommentsDatabase;
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(查询,注释.class)
.build();
FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(选项){
@凌驾
公共评论ViewHolder onCreateViewHolder(视图组父级,int-viewType){
//创建ViewHolder的新实例,在本例中,我们使用自定义
//为每个项目调用R.layout.message的布局
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.single_comment_item,父项,false);
返回新评论查看文件夹(视图);
}
@凌驾
受保护的无效onBindViewHolder(最终注释文件夹持有人、int位置、最终注释模型){
mCommentsDatabase.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildaded(@NonNull DataSnapshot DataSnapshot,@null字符串s){
if(dataSnapshot.exists()&&dataSnapshot!=null){
if(dataSnapshot.exists()){
String CommenterId=dataSnapshot.child(“uid”).getValue().toString();
mUsersDatabase.child(CommenterId).addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot userDataSnapshot){
if(userDataSnapshot.exists()){
字符串username=userDataSnapshot.child(“username”).getValue().toString();
字符串thumbImage=userDataSnapshot.child(“profile_缩略图”).getValue().toString();
String comment=dataSnapshot.child(“body”).getValue().toString();
Long timestamp=Long.parseLong(dataSnapshot.child(“timestamp”).getValue().toString());
GetTimeAgo GetTimeAgo=new GetTimeAgo();
String time=getTimeAgo.getTimeAgo(时间戳,getApplicationContext());
holder.setName(用户名);
holder.setComment(注释);
setImage(thumbImage,getApplicationContext());
设置时间(time);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
}
}
@凌驾
public void onChildChanged(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
公共void onChildRemoved(@NonNull DataSnapshot DataSnapshot){
}
@凌驾
public void onChildMoved(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
};
mCommentsList.setAdapter(适配器);
adapter.startListening();
}
有人能帮我指出出了什么问题吗


我已经在片段中实现了相同的东西,但在活动中使用时,它的工作方式很奇怪。

为什么要调用adapter.startListening();在同一个函数中?我已将其设置在startListening方法的作用域下。建议您使用
FirebaseRecyclerAdapter
从Firebase实时数据库检索数据并将其显示在
RecyclerView
中。