【发布时间】:2017-01-13 17:38:06
【问题描述】:
我正在使用 Firebase 作为数据库在 Android Studio 中开发一个应用程序,但我遇到了一个棘手的问题。我有一个从辅助类获取“pregunta”对象的片段,我在其中对数据库进行实际查询。问题是侦听器启动了一个单独的线程来等待事件,但与此同时该方法继续处理并返回一个空值。
关于如何避免这种异步或更好的实现方法的任何想法?谢谢!!
片段类:
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
【问题讨论】:
-
你可以
public pregunta getPregunta(long id, ChildEventListener listener){ //.. query.addChildEventListener(listener); //.. }然后更新你的片段类
标签: android android-fragments firebase firebase-realtime-database