在Android中等待Firebase异步检索数据

前端之家收集整理的这篇文章主要介绍了在Android中等待Firebase异步检索数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要存储他自己异步的FireBase getValue方法的结果.我不能使用类似“onPostExecute()”的东西,为了我的目的,我无法执行我的所有操作“into onDataChange()”因为我需要在将来的其他活动中引用一些参考.

这是我的片段检索数据:

List<Village> villages = new LinkedList<>();
    Firebase ref = new Firebase("MYFIREBASEURL").child("village");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            spinnerArray.clear();
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                Village v = postSnapshot.getValue(Village.class);
                villages.add(v);
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            System.out.println("The read Failed: " + firebaseError.getMessage());
        }
    });

如果我尝试从“onDataChange”中读取村庄,我自然会为他的异步生活读取空值.有一种方法可以确保调用onDataChange吗?

解决方法

对不起,如果这不是你想要的,因为我的英语太糟糕了.
您可以定义一个侦听器接口来处理它.
例:
public interface OnGetDataListener {
    public void onStart();
    public void onSuccess(DataSnapshot data);
    public void onFailed(DatabaseError databaseError);
}

我创建了一个自定义函数获取Database.class中的数据:

public void mReadDataOnce(String child,final OnGetDataListener listener) {
    listener.onStart();
   FirebaseDatabase.getInstance().getReference().child(child).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            listener.onSuccess(dataSnapshot);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            listener.onFailed(databaseError);
        }
    });
}

当我想从Main.class获取数据时,我会:

private void mCheckInforInServer(String child) {
    new Database().mReadDataOnce(child,new OnGetDataListener() {
        @Override
        public void onStart() {
            //DO SOME THING WHEN START GET DATA HERE
        }

        @Override
        public void onSuccess(DataSnapshot data) {
           //DO SOME THING WHEN GET DATA SUCCESS HERE
        }

        @Override
        public void onFailed(DatabaseError databaseError) {
           //DO SOME THING WHEN GET DATA Failed HERE
        }
    });

}

通过这种方式,您可以重用您的方法并处理数据.

猜你在找的Android相关文章