Firebase OnDataChange

时间:2017-07-12 09:05:51

标签: android firebase firebase-realtime-database

我有一个DialogFragment,并希望将来自Firebase数据库中特定位置的数据存储在ArrayList(变量arrList)中。我在onStart()方法中设置了一个值事件监听器并以DataSnaphsot(我不想使用REST)接收数据:

@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot data : dataSnapshot.getChildren()){
                Log.d("onDataChange", data.getValue().toString());
                arrList.add(data.getValue().toString());
            }
        }
Log.d("onStart", arrList.toString());

我还有两个Log.d,它们应该打印ArrayList的内容:

onStart()中的一个(见上文) 一个在onDetach()

 @Override
public void onDetach() {
    super.onDetach();
    Log.d("onDetach", arrList.toString());
}

结果:

D/onStart: [] 
D/onDataChange: name
D/onDataChange: surname
...
D/onDetach: [name, surname, ...]

如何填充ArrayList以便在onStart()中可用?

1 个答案:

答案 0 :(得分:1)

firebase的监听器方法以异步方式运行尝试将onStart的日志放在onDataChange方法中,如下所示

@Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot data : dataSnapshot.getChildren()){
            Log.d("onDataChange", data.getValue().toString());
            arrList.add(data.getValue().toString());
        }
        Log.d("onStart", arrList.toString());
    }