我正在使用Firebase作为数据库开发Android Studio中的应用程序,并且我有一个棘手的问题。我有一个从辅助类中获取'pregunta'对象的片段,我在其中对数据库执行实际查询。问题是侦听器启动一个单独的线程来等待事件,但同时该方法继续处理并返回一个空值。Firebase数据库和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