等到firebase检索数据 [英] wait until firebase retrieves data
问题描述
我想要构建一个方法,在 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()方法中调用,甚至可以在onCreate()方法中调用。
$ 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屋!