我面临着非常奇怪的问题。 我必须使用Json格式的volley库将一些数据发送到服务器。我将从另一个API获取数据并将其转发到服务器。现在的问题是,每当我调用函数来创建JSON时,它将从列表中获取最后一个值。
以下是转换jsonarray的代码
array = [:b, :a]
{ a: 23, b: 12 }.sort_by { |k, _| array.index(k) }.to_h
#=> {:b=>12, :a=>23}
在onclick按钮中我创建了jsonarray - 下面的代码
JSONObject mainObject = new JSONObject();
JSONArray jsonBody;
JSONObject object;
我记录的值正确,但mainObejct中的sch_id重复,这里是创建的json
btn_rec_invest_now.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.e(TAG, "Size of list : " + sipDetailses.size());
jsonBody = new JSONArray();
object = new JSONObject();
for (int i = 0; i < sipDetailses.size(); i++) {
String ID = sipDetailses.get(i).getId();
String DATE = sipDetailses.get(i).getSip_date_include();
String AMOUNT = sipDetailses.get(i).getMinimum_investment();
String TENURE = "1";
Log.e(TAG, "ID : " + ID);
Log.e(TAG, "DATE : "
+ sipDetailses.get(i).getSip_date_include());
Log.e(TAG, "AMOUNT : "
+ sipDetailses.get(i).getMinimum_investment());
Log.e(TAG, "TENURE : " + i);
Log.e(TAG, "USER ID : " + "1");
Log.d(TAG, "=================");
try {
object.put("sch_id", sipDetailses.get(i).getId());
object.put("date", DATE);
object.put("amount", AMOUNT);
object.put("tenure", TENURE);
object.put("user_id", "1");
jsonBody.put(object);
} catch (JSONException e) {
Log.d(TAG, "EXCEPTION OCCRUDED: " + e.toString());
}
}
try {
mainObject.put("A", jsonBody);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("", "JSONBODY : " + mainObject.toString());
sendDetails(mainObject);
}
});
这里sch_id总是来738而 - Log.e(TAG,&#34; ID:&#34; + ID); ID会有所不同 - 比如738,607,521等 - 这是正确的。 帮我在数组中得到正确的sch_id。在此先感谢。
答案 0 :(得分:1)
我认为你是在循环之外为你的JSONObject创建对象。 为对象创建实例(object = new JSONObject();) for inside for循环。如下所示
for (int i = 0; i < sipDetailses.size(); i++) {
JSONObject object = new JSONObject();
// do your operations
jsonBody.put(object);
}