1.说明问题:在for循环中创建一个Javabean对象,然后将遍历的值通过set方法更改,将set后的JavaBean对象add到list中。他只会add最后set到的值,解决如下,代码如下:
for (int i = 0; i < array.size(); i++) {
//声明JavaBean对象,注意啦:在这里声明对象就会造成我们说的问题
//B_admin_licens xzxk = new B_admin_licens();
String json = array.getString(i);
json = pretreatment(json);
JSONObject jsont = JSON.parseObject(json);
Object id = jsont.get("id");
Object company_id = jsont.get("company_id");
String qy_str = jsont.getString("qy_json");
JSONObject qy_json = JSON.parseObject(qy_str);
JSONArray info_array = qy_json.getJSONArray("info");
JSONArray title = qy_json.getJSONArray("title");
// 遍历info的内容
for (int j = 0; j < info_array.size(); j++) {
//注意啦:在这里声明对象就会有新的值
B_admin_licens xzxk = new B_admin_licens();
JSONArray info_list = info_array.getJSONArray(j);
xzxk.setId(id);
xzxk.setCompany_id(company_id);
// 判断key和value是否对等
if (title.size() != info_list.size()) {
// System.out.println("error");
}
// 遍历info数组的内容
else if (title.size() == info_list.size()) {
if (info_list.size() == 9) {
for (int k = 0; k < info_list.size(); k++) {
xzxk.setAllowNo(info_list.getString(1));
xzxk.setAllowName(info_list.getString(2));
xzxk.setTermFrom(info_list.getString(3));
xzxk.setTermTo(info_list.getString(4));
xzxk.setAllowOrg(info_list.getString(5));
xzxk.setAllowContent(info_list.getString(6));
xzxk.setAllowStatus(info_list.getString(7));
xzxk.setDetail(info_list.getString(8));
}
}
}
list.add(xzxk);
}
// list.add(xzxk1);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return list;
}
总结:JavaBean在for循环中,new一次给一个新的内存地址,如是在for循环外new的话从始至终都只有一个地址来存放JavaBean,所以最后循环的就是输出的内容