我已经定义了新的json对象和数组。
private JSONArray array = new JSONArray();
private JSONObject obj = new JSONObject();
然后我尝试在循环中从firebase获取一些数据并尝试将其放入定义的json对象和定义的json数组中的该对象。下面是我的代码
for(int i = 1; i < 13; i++){
String str = Integer.toString(i);
mRef.child("calendar").child(str).child("start_date").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
start_date = dataSnapshot.getValue().toString();
try {
obj.put("start_date", start_date);
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("start_date", start_date);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mRef.child("calendar").child(str).child("end_date").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
end_date = dataSnapshot.getValue().toString();
try {
obj.put("end_date", end_date);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Log.d("obje", "" + obj);
array.put(obj);
}
Log.d("arrary", "" + array);
但是当我记录我的数组或对象时,它显示为空。下面是单个循环的json对象的日志。 D / obje:{} 这是我循环后的数组。 D / arrary:[{},{},{},{},{},{},{},{},{},{},{},{}]
但是当我在onDataChange类中记录我的对象时,它会记录数据。但是当我在循环结束时登录它显示为空。
这是开始日期的日志,表明数据来自firebase D / start_date:09/17/2016
答案 0 :(得分:1)
问题是你试图从异步回调中获取值。在从异步请求获得回调之前,你的循环将结束,因此它显示为空。
试试这个,
AOP Logging Aspect