坚持使用list的eventlistener这个问题

时间:2017-05-31 15:02:12

标签: android firebase firebase-realtime-database

一直试图解决这个问题

我有一个名为datalist的列表,我在其中存储来自firebase的数据,以便在recyclerview中使用它。

但是问题出在childeventlistener里面,列表正在更新,但在此之前发生了返回调用并最终在空列表中。

应该做什么?

package com.example.dell.hungryapp;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Dell on 5/29/2017.
 */

public class itemmodel {
public String item_name;
public  int quantity;


public String getItem_name() {
    return item_name;
}

public void setItem_name(String item_name) {
    this.item_name = item_name;
}

public int getQuantity() {
    return quantity;
}

public void setQuantity(int quantity) {
    this.quantity = quantity;
}


public static List<itemmodel> getObjectList(){


    final List<itemmodel> datalist=new ArrayList<>();
    DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference();
    FirebaseUser user= FirebaseAuth.getInstance().getCurrentUser();




    databaseReference.child("Users").child(user.getUid()).child("Inventory").addChildEventListener(new ChildEventListener() {
       @Override
       public void onChildAdded(DataSnapshot dataSnapshot, String s) {
           System.out.println("value is : "+dataSnapshot.getValue());

           String id=dataSnapshot.getKey();
           Integer qty=dataSnapshot.getValue(Integer.class);

           itemmodel item=new itemmodel();
           item.setItem_name(id);
           item.setQuantity(qty);

           datalist.add(item);

           System.out.println("before size : "+datalist.size());

       }

       @Override
       public void onChildChanged(DataSnapshot dataSnapshot, String s) {

       }

       @Override
       public void onChildRemoved(DataSnapshot dataSnapshot) {

       }

       @Override
       public void onChildMoved(DataSnapshot dataSnapshot, String s) {

       }

       @Override
       public void onCancelled(DatabaseError databaseError) {

       }
   });



    System.out.println("before size : "+datalist.size());
    return datalist;


}
}

1 个答案:

答案 0 :(得分:0)

如果要从广告资源中检索整个数据,请点击此链接。我使用了地图来检索整个数据并将其存储在数组列表中

final DatabaseReference myRef = database.getReference().child("users").child(users.getUid).child("Inventory");

Remove the previous markers as the location updates

希望它能解决你的问题