首页 > 解决方案 > 如何从 Firebase 中检索数据并在 recyclerView 中一一显示孩子

问题描述

我有 2 个类。一个是 Groups,另一个是 GroupListAdapter。使用 RetrieveGroups 方法,我尝试获取 GroupName 的子项并在 recyclerView 中一一显示。字符串“retrieveGroupsName”的值类似于数据库中的值。德克萨斯!

一世在此处输入图像描述

公共无效检索组(){

    GroupReF.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (final DataSnapshot ds :dataSnapshot.getChildren()){

                String uid =  ds.getKey();

              DatabaseReference groupRef = GroupReF.child(uid).child("GroupName");
                groupRef.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        String  retrieveGroupsName  = dataSnapshot.getValue().toString();
                        Log.i(TAG,"value --------+++++++++++++" + retrieveGroupsName);

                            Groups groups = new Groups(retrieveGroupsName);
                            groupsList.clear();
                            groupsList.add(groups);
                    }

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

                    }
                });

            }
        }

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

        }
    });

}

public class GroupsListAdapter extends RecyclerView.Adapter<GroupsListAdapter.GroupListViewHolder> {

private final String TAG = "Groups adapter Activity";
ArrayList<Groups> groupsList;

public GroupsListAdapter(ArrayList<Groups> groupsList) {
    this.groupsList = groupsList;

}

@NonNull
@Override
public GroupsListAdapter.GroupListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.display_group_layout,parent,false);
    RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
    view.setLayoutParams(layoutParams);
    GroupListViewHolder groupListViewHolder = new GroupListViewHolder(view);
    return groupListViewHolder;
}
@Override
public void onBindViewHolder(@NonNull GroupListViewHolder holder, int position) {

    holder.groupName.setText(groupsList.get(position).getGroupName());
}

@Override
public int getItemCount() {
    return (groupsList == null) ? 0 : groupsList.size();

}

public class GroupListViewHolder extends RecyclerView.ViewHolder{

    public TextView groupName;
    public GroupListViewHolder(@NonNull View itemView) {
        super(itemView);

        groupName = itemView.findViewById(R.id.display_group_name);

    }
}

}

公共类组{

public String groupName;




public Groups(String groupName) {
    this.groupName = groupName;
}

public String getGroupName() {
    return  groupName;
}

public void setGroupName(String groupName) {
    this.groupName = groupName;
}

}

标签: androidfirebase-realtime-databaseandroid-recyclerview

解决方案


你应该像这样改变你的代码:

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            groupsList.clear();
            for(DataSnapshot data : dataSnapshot.getChildren()){
                String  retrieveGroupsName  = data.getValue(String.class);
                Log.i(TAG,"value --------+++++++++++++" + retrieveGroupsName);
                Groups groups = new Groups(retrieveGroupsName);
                groupsList.add(groups);
            }
            yourAdapter.notifyDataSetChanged();
        }

推荐阅读