AndroidスタジオでFirebaseをDBとして使用しているアプリを開発していますが、難しい問題があります。私はDBへの実際のクエリを行う補助クラスから 'pregunta'オブジェクトを取得するフラグメントを持っています。問題は、リスナーが別のスレッドを起動してイベントを待つことですが、その間にメソッドは処理を継続し、null値を返します。Firebase DBとAndroid:アクティビティ/フラグメントクラスと異なるFirebaseのクラスを使用した同期の欠如
この非同期を回避する方法やこれを実装するためのよりよい方法についてのアイデアはありますか?ありがとう!!
フラグメントクラス:
mPregunta = mSesionManager.getPregunta(id_pregunta_actual);
TextView view_pregunta = (TextView)view.findViewById(R.id.titulo_pregunta);
view_pregunta.setText(mPregunta.getTxt_pregutna());
補助クラスメソッド:
public pregunta getPregunta(long id){
mp.setId_pregunta(id);
Query query = mDB_Cuestionario.child("Tabla_Preguntas").orderByChild("id").equalTo(id);
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
mp.setTxt_pregutna(dataSnapshot.child("txt").getValue().toString());
Log.e("FBHELPER", "ID LISTENER: "+mp.getId_pregunta());
Log.e("FBHELPER", "TXT LISTENER: "+mp.getTxt_pregutna());
}
[-- rest of code --]
});
Log.e("FBHELPER", "TXT RESPUESTA: "+mp.getTxt_pregutna());
return mp;
}
ログ:
The method returns null value:
01-13 17:16:52.101 8994-8994/com.example.fran.cuestionario E/FBHELPER: TXT RESPUESTA: null
1 second later, the Event occurs, but I can't return the value.
01-13 17:16:53.497 8994-8994/com.example.fran.cuestionario E/FBHELPER: ID LISTENER: 0
01-13 17:16:53.497 8994-8994/com.example.fran.cuestionario E/FBHELPER: TXT LISTENER: TEST VALUE
あなたでし '公共pregunta getPregunta(長いID、ChildEventListenerリスナー){// ... query.addChildEventListener(リスナー)。 // ..} 'そしてあなたのフラグメントクラスを更新してください – Linxy