gpt4 book ai didi

java - 在for循环java中为json对象添加值

转载 作者:行者123 更新时间:2023-11-30 00:24:13 25 4
gpt4 key购买 nike

我已经定义了新的 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/对象:{}这是我循环后的数组。D/数组:[{},{},{},{},{},{},{},{},{},{},{},{}]

但是当我在 onDataChange 类中记录我的对象时,它会记录数据。但是当我在循环结束时登录时它显示为空。

这是开始日期的日志,显示数据来自 firebaseD/开始日期:2016 年 9 月 17 日

最佳答案

问题是您正试图从异步回调中获取值。你的 for 循环将在你从异步请求中获得回调之前结束,因此它显示为空。

这样试试,

for(int i = 1; i < 13; i++){
String str = Integer.toString(i);
mRef.child("calendar").child(str).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String start_date = (String) dataSnapshot.child("start_date").getValue();
String end_date = (String) dataSnapshot.child("end_date").getValue();

try {

JSONObject jsonObject = new JSONObject();
jsonObject.put("start_date", start_date);
jsonObject.put("end_date", end_date);

Log.d("obje", "" + jsonObject);

array.put(jsonObject);

} catch (JSONException e) {
e.printStackTrace();
}

Log.d("start_date", start_date);
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}

关于java - 在for循环java中为json对象添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com