在Android中等待Firebase异步回顾数据 [英] Wait Firebase async retrive data in android

查看:270
本文介绍了在Android中等待Firebase异步回顾数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要存储由他自己异步的FireBase getValue方法的结果。我不能使用像onPostExecute(),为我的目的,我不能执行所有我的操作onDataChange()因为我需要在未来的其他活动中的一些参考。



这里是我检索数据的代码片段:

 列表< Village>村庄=新的LinkedList<>(); 
Firebase ref =新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 $ b $ public void onCancelled(FirebaseError firebaseError){
System.out.println(The read failed:+ firebaseError.getMessage());
}
} );

如果我尝试从onDataChange中读取村庄,那么对于他的异步生活,值。有一种方法可以确保onDataChange被调用?
$ b $ p

感谢提前。

解决方案

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

  public interface OnGetDataListener {
public void onStart();
public void onSuccess(DataSnapshot data);
public void onFailed(DatabaseError databaseError);





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

  public void mReadDataOnce(String child,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);
}
});



$ b当我想从Main.class获取数据时, ()

$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $私人无效mCheckInforInServer(字符串子){
新的数据库().mReadDataOnce(child,new OnGetDataListener(){
@Override
public void onStart(){
//做一些事情,当开始获取数据时
}

@Override
public void onSuccess (DataSnapshot data){
//做一些事情,当获得数据成功时

$ b @Override
public void onFailed(DatabaseError databaseError){
//在数据失败的时候做一些事情
}
});




$ b $ p
$ b

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


i need to store the result of FireBase getValue method that is async by his own. I can't use something like "onPostExecute()" and, for my purpose, i can't execute all my operation "into onDataChange()" because i need some references in future time in other activities.

Here my snippet to retrieve data:

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

If i try to read villages out of "onDataChange" i have, naturally for his async life, null value. There is a way to ensure that onDataChange was called?.

Thanks in advance.

解决方案

Sorry if it's not what you want because my English too bad. You can define a listener interface to handle it. Example:

 public interface OnGetDataListener {
    public void onStart();
    public void onSuccess(DataSnapshot data);
    public void onFailed(DatabaseError databaseError);
}

And I create a custom function to get data in Database.class:

  public void mReadDataOnce(String child, 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);
        }
    });
}

When I want to get data from Main.class, I do:

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

}

By this way, you can reuse your method and handle data.

这篇关于在Android中等待Firebase异步回顾数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆