我正在尝试将 firebase 实时数据库中的数据检索到我的 recyclerview 中,但数据显示为空

Posted

技术标签:

【中文标题】我正在尝试将 firebase 实时数据库中的数据检索到我的 recyclerview 中,但数据显示为空【英文标题】:I am trying to retrieve data from firebase realtime database into my recyclerview but data is showing null 【发布时间】:2020-10-15 15:16:33 【问题描述】:

我正在尝试从我的 firebase 数据库中检索组。在组内部我正在尝试从内部检索组数据列表和所有节点及其数据。我目前只创建了 1 个组,但在我的主页上我是无法检索数据。我没有收到任何错误,但它都显示为 null 并且我的文本视图为空白。

我的主要课程

public class Homepage extends Fragment  


    private RecyclerView mRecyclerView;
    private DatabaseReference ref;
    private FirebaseDatabase database;
    private MyAdapter myAdapter;
    private List<model> list;




    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        View v =  inflater.inflate(R.layout.fragment_homepage, container, false);


        FloatingActionButton floatingActionButton = v.findViewById(R.id.floatingActionButton);
        mRecyclerView = v.findViewById(R.id.recyclerview);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        database = FirebaseDatabase.getInstance();
        ref = database.getReference().child("Chatrooms").child("chatroomdata");
        list = new ArrayList<>();

        ref.addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) 
                if (snapshot.exists()) 
                    for (DataSnapshot npsnapshot : snapshot.getChildren()) 
                        model l = npsnapshot.getValue(model.class);
                        list.add(l);
                    
                    myAdapter = new MyAdapter(list);
                    mRecyclerView.setAdapter(myAdapter);
                

            

            @Override
            public void onCancelled(@NonNull DatabaseError error) 

            
        );






        floatingActionButton.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                startActivity(new Intent(getActivity(),createchatroom.class));
            
        );


        return v;








    

我的适配器和查看器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
        private List<model> list;

        public MyAdapter(List<model> list) 
            this.list = list;
        

        @NonNull
        @Override
        public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
            View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.chatroomrecyclerdesign,parent,false);
            return new ViewHolder(view);
        

        @Override
        public void onBindViewHolder(@NonNull MyAdapter.ViewHolder holder, int position) 
            model ld = list.get(position);
            holder.title.setText(ld.getName());
            holder.viewers.setText(ld.getViewers());
            Glide.with(getActivity()).load(ld.getImage()).into(holder.circleImageView);
            String documentid = ld.getDocumentid();

        

        @Override
        public int getItemCount() 
            return list.size();
        

        public class ViewHolder extends RecyclerView.ViewHolder
            private TextView title,viewers;
            CircleImageView circleImageView;

            public ViewHolder(View itemView) 
                super(itemView);
                title=(TextView)itemView.findViewById(R.id.chatroomtitlerecycler);
                viewers=(TextView)itemView.findViewById(R.id.chatroomviewersrecycler);
                circleImageView = itemView.findViewById(R.id.chatroomdisplayimagerecycler);


            
        

我的模型课

public static class model
        String image,name,documentid,viewers;

        public model()

        

        public String getName() 
            return name;
        

        public void setName(String name) 
            this.name = name;
        

        public String getImage() 
            return image;
        

        public void setImage(String image) 
            this.image = image;
        

        public String getDocumentid() 
            return documentid;
        

        public void setDocumentid(String documentid) 
            this.documentid = documentid;
        

        public String getViewers() 
            return viewers;
        

        public void setViewers(String viewers) 
            this.viewers = viewers;
        

        public model(String image,String name, String documentid, String viewers) 
            this.image = image;
            this.name = name;
            this.documentid = documentid;
            this.viewers = viewers;
        
    

我的数据库结构

enter image description here

【问题讨论】:

我认为 this 可能会有所帮助。 【参考方案1】:

您检查过 FCM 中的规则吗?


  "rules": 
    ".read": "true",
    ".write": "true"
  

基本上,使用 auth 设置 FCM 权限。

【讨论】:

【参考方案2】:

主类变化---

来自

ref = database.getReference().child("Chatrooms").child("chatroomdata");

收件人

ref = database.getReference("Chatrooms/chatroomdata");

模型的结构也应该和你在数据库中的一样。还要检查数据库的读写权限。

【讨论】:

以上是关于我正在尝试将 firebase 实时数据库中的数据检索到我的 recyclerview 中,但数据显示为空的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录

Firebase 网络将聊天存储为实时数据库中的数组

将坐标存储到 Firebase 中的实时数据库

如何从 Firebase 实时数据库中获取数据到 Flutter 中的列表中?

我正在尝试从android活动输入多个值到firebase实时数据库,但代码中的按钮不起作用

将 Firebase 实时数据库迁移到 Firestore