Android firebase数据库中的数据未正确显示

Android firebase数据库中的数据未正确显示,android,firebase,firebase-realtime-database,android-recyclerview,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我正在尝试从firebase数据库检索数据,当我在安装应用程序后第一次尝试检索数据时,recycler视图中没有显示任何内容,但当我按back并再次尝试检索数据时,其显示正确,建议我更改代码中应该执行的操作,以便在第一次尝试时正确显示数据 用于返回ArrayList的方法 public ArrayList<SaveAddInformation> retrieve(){ AdvertisementRef.addValueEventListener(new ValueEven

我正在尝试从firebase数据库检索数据,当我在安装应用程序后第一次尝试检索数据时,recycler视图中没有显示任何内容,但当我按back并再次尝试检索数据时,其显示正确,建议我更改代码中应该执行的操作,以便在第一次尝试时正确显示数据

用于返回ArrayList的方法

 public ArrayList<SaveAddInformation> retrieve(){

    AdvertisementRef.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) {

        }
    });


    return adinfolist;

}

如果您确定代码没有错误,我想提醒您Firebase连接是异步的。 因此,函数
retrieve()
第一次返回arrayList的值时,实际上是空的。
您可以在
onDataChange()
方法中的for循环之后调用
adapter.notifyDataSetChanged()

Firebase异步加载数据。当您返回的
adinvolist
尚未填充时。看,事实上我是android开发的新手,你能详细说明一下关于我的代码你想说什么吗?@PriyankaKadam我的回答对你没有帮助吗?
 Context c;
ArrayList<SaveAddInformation> adinfolist;

public MyAdapter(Context c, ArrayList<SaveAddInformation> adinfolist) {
    this.c = c;
    this.adinfolist = adinfolist;
}

@Override
public MyViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v= LayoutInflater.from(c).inflate(R.layout.design_row,parent,false);
  MyViewholder myViewholder=new MyViewholder(v);

   return myViewholder;
}

@Override
public void onBindViewHolder(MyViewholder holder, int position) {
    SaveAddInformation save=adinfolist.get(position);
    holder.titleTv.setText(save.getTitleS());
    holder.rentamt.setText(save.getRent_amount());
    holder.rentdays.setText(save.getRentDayS());
    holder.desc.setText(save.getDescriptionS());

    holder.setImage(getApplicationContext(), save.getImageuri());

  //  holder.titleTv.setText((CharSequence) adinfolist.get(position));
}

@Override
public int getItemCount() {
    return adinfolist.size();
}
 public MyViewholder(View itemView) {
    super(itemView);
    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 imageuri) {

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

    // We Need TO pass Context

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



}