0
我是新手!请有人可以帮助我。 我知道在这里我正在处理异步编程,我试图返回字符串,但它仍然返回null。试图在Firebase中使用onDataChange()以外的数据
有人可以告诉我我错在哪里。
public interface OnGetDataListener {
public void onStart();
public void onSuccess(DataSnapshot data);
public void onFailed(DatabaseError databaseError);
}
public void mReadDataOnce(String email ,String child, final OnGetDataListener listener) {
listener.onStart();
myRef.child(email).child(child).limitToFirst(1).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
listener.onSuccess(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
listener.onFailed(databaseError);
}
});
}
private String mCheckInforInServer(String email ,String child) {
final String[] returnvalue = new String[1];
mReadDataOnce(email ,child, new OnGetDataListener() {
@Override
public void onStart() {
//DO SOME THING WHEN START GET DATA HERE
}
@Override
public void onSuccess(DataSnapshot data) {
returnvalue[0] = data.getValue().toString();
//DO SOME THING WHEN GET DATA SUCCESS HERE
}
@Override
public void onFailed(DatabaseError databaseError) {
//DO SOME THING WHEN GET DATA FAILED HERE
}
});
return returnvalue[0] ;
}
然后我打电话吧:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(" ","HIMANSHU" + mCheckInforInServer("a","name"));
Log.i(" ","HIMANSHU" + mCheckInforInServer("a","email"));
}
日志是印刷空,我想要的值。请帮忙!
感谢您的答复。但我试图访问onCreate()中的mReadDataOnce()方法之外的返回值。 –
因此,例如,您希望在主活动中使用名为'doSomethin()'的方法使用该数据。然后,你可以简单地在'OnGetDataListener#onSuccess()' – ZeekHuge
的实现中调用'doSomething(data)'我试过了,但它仍然返回null。 –