没有调用Android方法

时间:2017-11-20 19:45:42

标签: android

在我的片段onCreateView中运行此方法

    List<Product> mProducts = Database.getDatabase(mRef).getProducts();

这是我的数据库类:

public class Database {
    private FirebaseDatabase mDb;
    private DatabaseReference dbRef;
    private static Database sDatabase;
    private List<Product> mProducts;

    public static Database getDatabase(DatabaseReference ref) {
        if(sDatabase == null) {
            sDatabase = new Database(ref);
        }
        return sDatabase;
    }

    public Database(DatabaseReference mReference) {
        this.mDb = FirebaseDatabase.getInstance();
        this.dbRef = mReference;
    }




    public List<Product> getProducts() {
        mProducts = new ArrayList<>();
        dbRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot data : dataSnapshot.getChildren()) {
                    mProducts.add(data.getValue(Product.class));
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        return mProducts;
    }

在通过调试器时,getProducts()方法没有被调用,它会创建一个新的Database实例,并且永远不会到达getProducts()方法。稍后的List用于recyclerView适配器。

1 个答案:

答案 0 :(得分:0)

mProducts 将为空列表,因为addValueEventListener需要一些时间才能返回,并且您在设置侦听器后返回值 解决方法是,当您获得回调方法 onDataChange

中的产品列表时,您必须发回一些回调