我正在尝试从Firebase数据库中的每个孩子读取一些值,然后将它们存储在数组列表中。
首先,我在外面创建了一个变量,因此可以通过任何方法访问它。
ArrayList<LatLng> latlngs = new ArrayList<>();
然后在onCreate方法上,我做了这个
mLocationDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
LocationCurrent post = dsp.getValue(LocationCurrent.class);
Double latitude = Double.parseDouble(post.getLatitude());
Double longitude = Double.parseDouble(post.getLongitude());
currentLocationLatLng = new LatLng(latitude, longitude);
latlngs.add(currentLocationLatLng);
Log.i("LAT LONGS IN", String.valueOf(latlngs));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
在那里记录工作正常,我可以看到所有LatLong值。但是当我在onCreate中调用相同的日志但在上面的方法调用之外我得到一个空数组。
Log.i("LAT LONGS OUT", String.valueOf(latlngs));
问题是什么,最好的解决办法是什么?
答案 0 :(得分:0)
使用addListenerForSingleValueEvent时,onDataChange将在未来的某个时间异步调用回调。如果您尝试在下一行之后记录某些内容,则仍可能无法执行onDataChange回调中的代码。没有解决方法,目前还没有初始化。如果要处理数据,请确保等到触发onDataChange回调。