我已全局声明了一个数组地址,并将数据放在以下代码中的数组中
DatabaseReference rootRe = FirebaseDatabase.getInstance().getReference();
count=0;
for( int i = 0 ; i<base.length;i++){
DatabaseReference assaultRef = rootRe.child(base[i]);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String latlng = ds.child("liststring").child("0").getValue(String.class);
//address.add(latlng);
address[count] = latlng;
Log.i("Address","Address["+count+"]= "+address[count]);
count++;
//Toast.makeText(MainActivity.this, address.length, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
assaultRef.addListenerForSingleValueEvent(eventListener);
}
//for (int i = 0 ; i<10;i++)
Log.i("Address[0]","Address[0]= "+address[0]);
我的问题是在toast之前它在地址中显示值,但在最后一个Log.i()地址值显示为null。
答案 0 :(得分:0)
注册侦听器后立即调用Log.i("Address[0]","Address[0]= "+address[0]);
方法,但数据更改时会完成数组填充,从而导致调用onDataChange()方法。注册后必须发生这种情况。调试它的一个好方法是在onDataChange方法和log.i()方法之后添加print语句,并观察方法调用的顺序。