等到firebase检索数据 [英] wait until firebase retrieves data

查看:117
本文介绍了等到firebase检索数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要构建一个方法,在 FireBase 中返回一个子元素值。我试图做这样的事情:

  public String getMessage(){

root.child MessageOnLaunch)。child(Message)。addListenerForSingleValueEvent(new ValueEventListener(){
@Override $ b $ public void onDataChange(DataSnapshot dataSnapshot){$ b $ message =(String)dataSnapshot.getValue );
Log.i(4r398,work);
}

@Override
public void onCancelled(FirebaseError firebaseError){
Log.e(error,firebaseError.getMessage());
}
});
返回消息;



$ b $ p
$ b

问题在于该方法返回 null code>这可能是因为该方法不会等到侦听器结束并返回 null ,因为它的缺省值是 message
如何让这个方法等到侦听器发生然后返回值。

解决方案

创建一个接口

pre $ public interface OnGetDataListener {
//这是回调函数
void onSuccess (DataSnapshot dataSnapshot);
void onStart();
void onFailure();





声明下面的函数readData()

  public void readData(Firebase ref,final OnGetDataListener listener){
listener.onStart();
ref.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
listener.onSuccess(dataSnapshot);
}

@Override
public void onCancelled(FirebaseError firebaseError){
listener.onFailure();
}
});

$ b

调用readData()函数如下


$ b $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ readData() b $ b public void onSuccess(DataSnapshot dataSnapshot){

//从数据库获取数据....现在您可以使用检索到的数据


}
@Override
public void onStart(){
//当启动
Log.d(ONSTART,Started);
}

@Override
public void onFailure(){
Log.d(onFailure,Failed);
}
}); readData()可以在你的getMessage()方法中调用,甚至可以在o​​nCreate()方法中调用。



$ b $ >

I want to build a method that returns a child value in FireBase. I tried to do something like this:

public String getMessage(){

    root.child("MessagesOnLaunch").child("Message").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            message = (String) dataSnapshot.getValue();
            Log.i("4r398", "work");
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.e("error", firebaseError.getMessage());
        }
    });
    return message;
}

The problem is that the method returns null that is probably because the method doesn't wait until the listener finishes and return null because its the default value of message. How can I make this method wait until the listener occurs and then return the value.

解决方案

Make an interface

 public interface OnGetDataListener {
    //this is for callbacks
    void onSuccess(DataSnapshot dataSnapshot);
    void onStart();
    void onFailure();
}

Declare the following function readData()

public void readData(Firebase ref, final OnGetDataListener listener) {
    listener.onStart();
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            listener.onSuccess(dataSnapshot);
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            listener.onFailure();
        }
    });

}

Call the readData() function as follows

readData(root.child("MessagesOnLaunch").child("Message"), new OnGetDataListener() {
                @Override
                public void onSuccess(DataSnapshot dataSnapshot) {

               //got data from database....now you can use the retrieved data


                }
                @Override
                public void onStart() {
                    //when starting
                    Log.d("ONSTART", "Started");
                }

                @Override
                public void onFailure() {
                    Log.d("onFailure", "Failed");
                }
            });

readData() can be called inside your getMessage() method or even inside onCreate()

这篇关于等到firebase检索数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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