首页 > 解决方案 > 从 Firebase 投射数据时为空数据

问题描述

我希望你一切都好,我正在使用 FirebaseDataBase,我在将来自每个节点的数据进行 Castear 并将它们显示在 CardView 旁边的 Recyclearview 中时遇到问题,我正在使用适配器。

我附上了结构和节点如何组成的图像,我需要获取它们的信息。

节点结构的图像

 Context context;
    List<ActiveAchievements> categorieslist;


    public AssetsAdapter(Context context, List<ActiveAchievements> contactList) {
        this.context = context;
        this.categorieslist = contactList;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card_view_assents, parent, false);
        return new ViewHolder(itemView);

    }

    @Override
    public void onBindViewHolder(ViewHolder Viewholder, final int position) {
        final ActiveAchievements achievements = categorieslist.get(position);

        Viewholder.title.setText(achievements.getTitulo());
        Viewholder.descripcion.setText(achievements.getDescripcion());
        Viewholder.conins.setText(achievements.getQaploins());
        Viewholder.timer.setText(achievements.getTiempoLimite());

        /**
        Glide.with(context)
                .load(categoriesP.getLogo())
                .apply(new RequestOptions().override(200, 200))
                .error(Glide.with(context).load(R.mipmap.ic_launcher))
                .into(Viewholder.imgLogo);**/


    }

    @Override
    public int getItemCount() {

        return categorieslist.size();
    }


    public class ViewHolder extends RecyclerView.ViewHolder {

        public ImageView imgLogo;
        public TextView title,conins,descripcion,timer;
        public ProgressBar progress;




        public ViewHolder(View itemView) {

            super(itemView);

            //imgLogo = itemView.findViewById(R.id.imgLogo);
            title = itemView.findViewById(R.id.title_text);
            conins = itemView.findViewById(R.id.title_text);
            descripcion = itemView.findViewById(R.id.title_text);
            timer = itemView.findViewById(R.id.conins_text);
            progress = itemView.findViewById(R.id.progress_assets);

        }
    }
}
 private RecyclerView mRecyclerView;
    private List<ActiveAchievements> list;
    AssetsAdapter adapter;

    /** FIREBASE **/
    private FirebaseAuth firebaseAuth;
    private FirebaseDatabase mFirebaseDatabase;
    private DatabaseReference mLogrosActivosDatabaseReference;
    private DatabaseReference mqaploinsActivosDatabaseReference;
    private DatabaseReference msocialActivosDatabaseReference;
    private DatabaseReference mverificadoActivosDatabaseReference;
    private DatabaseReference mxOverActivosDatabaseReference;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.item_recyclerview, container, false);


        // Referencias
        mRecyclerView = view.findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        /**FIREBASE DATA**/
        firebaseAuth = FirebaseAuth.getInstance();
        mFirebaseDatabase = FirebaseDatabase.getInstance();

        //mLogrosActivosDatabaseReference = mFirebaseDatabase.getReference().child("logrosActivos");

        mLogrosActivosDatabaseReference = FirebaseDatabase.getInstance().getReference().child("logrosActivos");
        mqaploinsActivosDatabaseReference = FirebaseDatabase.getInstance().getReference().child("qaploins");
        msocialActivosDatabaseReference = FirebaseDatabase.getInstance().getReference().child("social");
        mverificadoActivosDatabaseReference = FirebaseDatabase.getInstance().getReference().child("verificado");
        mxOverActivosDatabaseReference = FirebaseDatabase.getInstance().getReference().child("xOver");
        //mLogrosActivosDatabaseReference.keepSynced(true);
        mLogrosActivosDatabaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                list = new ArrayList<ActiveAchievements>();

                if (dataSnapshot.exists()){

                    for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren())
                    {
                        ActiveAchievements p = dataSnapshot1.getValue(ActiveAchievements.class);
                        ActiveAchievements fire = new ActiveAchievements();
                        String titulo = p.getTitulo();
                        String descripcion = p.getDescripcion();
                        String pageLink = p.getPageLink();
                        String photoUrl = p.getPhotoUrl();
                        String qaploins = p.getQaploins();
                        String tiempoLimite = p.getTiempoLimite();
                        String tipoLogro = p.getTipoLogro();
                        int totalPuntos = p.getTotalPuntos();
                        list.add(fire);
                    }
                    adapter = new AssetsAdapter(getActivity(),list);
                    mRecyclerView.setAdapter(adapter);
                    adapter.notifyDataSetChanged();


                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(getActivity(), "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
            }
        });
        return view;
    }


}


```ActiveAchievements

public class ActiveAchievements {

    private String descripcion;
    private String pageLink;
    private String photoUrl;
    private String qaploins;
    private String tiempoLimite;
    private String tipoLogro;
    private String titulo;
    private int totalPuntos;

    public ActiveAchievements(String descripcion, String pageLink, String photoUrl, String qaploins, String tiempoLimite, String tipoLogro, String titulo, int totalPuntos) {
        this.descripcion = descripcion;
        this.pageLink = pageLink;
        this.photoUrl = photoUrl;
        this.qaploins = qaploins;
        this.tiempoLimite = tiempoLimite;
        this.tipoLogro = tipoLogro;
        this.titulo = titulo;
        this.totalPuntos = totalPuntos;
    }

    public ActiveAchievements() {

    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getPageLink() {
        return pageLink;
    }

    public void setPageLink(String pageLink) {
        this.pageLink = pageLink;
    }

    public String getPhotoUrl() {
        return photoUrl;
    }

    public void setPhotoUrl(String photoUrl) {
        this.photoUrl = photoUrl;
    }

    public String getQaploins() {
        return qaploins;
    }

    public void setQaploins(String qaploins) {
        this.qaploins = qaploins;
    }

    public String getTiempoLimite() {
        return tiempoLimite;
    }

    public void setTiempoLimite(String tiempoLimite) {
        this.tiempoLimite = tiempoLimite;
    }

    public String getTipoLogro() {
        return tipoLogro;
    }

    public void setTipoLogro(String tipoLogro) {
        this.tipoLogro = tipoLogro;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public int getTotalPuntos() {
        return totalPuntos;
    }

    public void setTotalPuntos(int totalPuntos) {
        this.totalPuntos = totalPuntos;
    }

    @Override
    public String toString() {
        return "ActiveAchievements{" +
                "descripcion='" + descripcion + '\'' +
                ", pageLink='" + pageLink + '\'' +
                ", photoUrl='" + photoUrl + '\'' +
                ", qaploins='" + qaploins + '\'' +
                ", tiempoLimite='" + tiempoLimite + '\'' +
                ", tipoLogro='" + tipoLogro + '\'' +
                ", titulo='" + titulo + '\'' +
                ", totalPuntos=" + totalPuntos +
                '}';
    }
}

标签: androidfirebase-realtime-databaseandroid-recyclerview

解决方案


我认为您正试图从qaploins孩子那里获得价值。但是您正在从logrosActivos参考中获取数据。所以你可能会得到空数据。尝试这个。

    mqaploinsActivosDatabaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list = new ArrayList<ActiveAchievements>();

            if (dataSnapshot.exists()){

                for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren())
                {
                    ActiveAchievements p = dataSnapshot1.getValue(ActiveAchievements.class);
                    ActiveAchievements fire = new ActiveAchievements();
                    String titulo = p.getTitulo();
                    String descripcion = p.getDescripcion();
                    String pageLink = p.getPageLink();
                    String photoUrl = p.getPhotoUrl();
                    String qaploins = p.getQaploins();
                    String tiempoLimite = p.getTiempoLimite();
                    String tipoLogro = p.getTipoLogro();
                    int totalPuntos = p.getTotalPuntos();
                    list.add(p);//add this instead   of list.add(fire);
                }
                adapter = new AssetsAdapter(getActivity(),list);
                mRecyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();


            }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(getActivity(), "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
        }
    });

更新 1:您的数组列表为空或收到空数据?您正在使用空对象更新列表。所以添加list.add(p)而不是list.add(fire).


推荐阅读