为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牛魔王的故事 2019-07-31 10:22:48
在Android中等待Firebase异步检索数据我需要存储他自己异步的FireBase getValue方法的结果。我不能使用类似“onPostExecute()”的东西,为了我的目的,我无法执行“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吗?
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

对不起,如果这不是你想要的,因为我的英语太糟糕了。您可以定义一个侦听器接口来处理它。例:

 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
        }
    });}

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


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 381 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信