私はこれで新しくなりました!誰かが私を助けることができますか? ここで私は非同期プログラミングを扱っていることを知っています。文字列を返そうとしていますが、それでも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] ;
}
その後、私はそれを呼び出しています:ログインがnull印刷され
@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()'と呼ばれるメソッドでそのデータを使用したいとします。次に、 'OnSource()'の実装の中で単に 'doSomething(data)'を呼び出すことができます。 – ZeekHuge
私はそれを試みましたが、それでもnullを返します。 –