【问题标题】:Unable to retrieve data from firebase database due to async nature of firebase dabase由于 firebase 数据库的异步性质,无法从 firebase 数据库中检索数据
【发布时间】:2017-10-28 17:18:53
【问题描述】:

由于 Firebase API 的异步性质,当我第一次尝试检索数据时,我的 ArrayList 似乎为空,第二次尝试加载数据它已正确加载,这是与此相关的代码。 用于检索数据的方法

    AdvertisementRef.orderByChild("Category").equalTo(categoryS).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
                SaveAddInformation mModel = eventSnapshot.getValue(SaveAddInformation.class);
                Log.d("DATA" ,""+ mModel);
                adinfolist.add(mModel);
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getMessage());
        }
    });


    return adinfolist;

}

主活动

     rv.setLayoutManager(new LinearLayoutManager(this));
    rv.setHasFixedSize(true);
    advertismentref= FirebaseDatabase.getInstance().getReference("ADVERTISEMENT INFORMATION");
    helper=new Firebase_helper(advertismentref);
    adapter=new AdvertisementAdapter(helper.retrieve(/*catS*/),this);
    // adapter  = new AdvertisementAdapter(this, helper.retrieve());
    rv.setAdapter(adapter);

ViewHolder 和适配器类

public class AdvertisementAdapter extends RecyclerView.Adapter <AdvertisementAdapter.AdvetisementViewHolder>{
ArrayList<SaveAddInformation>saveAddInformations=new ArrayList<SaveAddInformation>();
Context ctx;

public AdvertisementAdapter(ArrayList<SaveAddInformation> saveAddInformations,Context ctx) {
    this.saveAddInformations = saveAddInformations;
    this.ctx=ctx;
}

@Override
public AdvertisementAdapter.AdvetisementViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.design_row,parent,false);
    AdvetisementViewHolder myViewholder=new AdvetisementViewHolder(v,ctx,saveAddInformations);

    return myViewholder;
}

@Override
public void onBindViewHolder(AdvertisementAdapter.AdvetisementViewHolder holder, int position) {

    SaveAddInformation save=saveAddInformations.get(position);
    String title=save.getTitleS();
    holder.titleTv.setText(title);
    String rentamt=save.getRent_amount();
    holder.rentamt.setText(rentamt);
    String rentdays=save.getRentDaysSpin();
    holder.rentdays.setText(rentdays);
    String description=save.getProductDetails();
    holder.desc.setText(description);
    String imguri=save.getImageuri();

    holder.setImage(getApplicationContext(), imguri);



}



@Override
public int getItemCount() {
    return saveAddInformations.size();
}


public static class AdvetisementViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    TextView titleTv,rentamt,rentdays,desc;
    Context ctx;
    ImageView adimg;
    ArrayList<SaveAddInformation>saveAddInformations=new ArrayList<SaveAddInformation>();

    public AdvetisementViewHolder(View itemView,Context ctx,ArrayList<SaveAddInformation>saveAddInformations) {


        super(itemView);
        this.saveAddInformations=saveAddInformations;
        itemView.setOnClickListener(this);
        this.ctx=ctx;


        titleTv=(TextView)itemView.findViewById(R.id.Titletextv);

        rentamt=(TextView)itemView.findViewById(R.id.rent_amount);
        rentdays=(TextView)itemView.findViewById(R.id.days_rent);
        desc=(TextView)itemView.findViewById(R.id.descTV);




    }

    public void setImage(Context applicationContext, String imguri) {

        adimg=(ImageView)itemView.findViewById(R.id.ad_image);

        // We Need TO pass Context

        Picasso.with(applicationContext).load(imguri).into(adimg);

    }

【问题讨论】:

  • 当您使用接口获取数据时,您可以使用相同的接口来更新适配器

标签: android asynchronous arraylist firebase-realtime-database android-recyclerview


【解决方案1】:

我刚刚将检索方法移入主活动并调用了 adapter.notifyDataSetChanged();在 onDataChange 和 onCancelled 方法中,它起作用了!!!

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2018-09-04
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多