PHP/Android和JSONObject;我似乎只能访问最后一个元素
我有一个设置,它是返回一个可能相当数量的信息。以下是日志:PHP/Android和JSONObject;我似乎只能访问最后一个元素,php,android,mysql,json,Php,Android,Mysql,Json,我有一个设置,它是返回一个可能相当数量的信息。以下是日志: 04-17 22:38:21.886: DEBUG/TestMYSQL(12603): Result of sql: [{"id":"1","front_text":"the dog was so cute","back_text":"its name was dolly"}, {"id":"2","front_text":"plants use the sun","back_text":"isn't that interesting
04-17 22:38:21.886: DEBUG/TestMYSQL(12603): Result of sql:
[{"id":"1","front_text":"the dog was so cute","back_text":"its name was dolly"},
{"id":"2","front_text":"plants use the sun","back_text":"isn't that interesting"},
{"id":"3","front_text":"plants can use the sun to create","back_text":"energy"},
{"id":"4","front_text":"a plant also needs minerals","back_text":"from the soil"},
{"id":"5","front_text":"without water the plant would","back_text":"probably die"},
{"id":"6","front_text":"plants are little machines","back_text":"who love to eat"}]
为了获得这些信息,我让它执行一个php文件。以下是一些相关的Java、android代码:
.....
result = sb.toString();
Log.d(TAG, "Result of sql: " + result);
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
// parse json data
JSONObject json_data = null;
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
}
return json_data;
问题是我似乎只能进入决赛。。。嗯,行。也就是说,在上面的数据中,我似乎只能访问id:6行
我正在查看auto_complete和JSONObject,但目前我没有足够的经验来解决这个问题,而且已经很晚了
关于如何在java中循环jsonObject有什么想法吗
让我花一分钟分析一下结构,然后再上交。我对JSON了解不多,但它看起来是这样的:
我用我设置的表查询数据库,诸如此类。
它返回数据行。
我想我的问题是,一行键值对如何编码到JSON对象中,我如何访问不同的“行”?在循环的每次迭代中,您都在覆盖由
JSON\u data
引用的JSONObject。因此在最后,它总是返回jArray
中的最后一个元素
由于需要返回多个对象,因此可以:
- 只需将
返回调用函数即可。然而,这意味着调用者必须处理数据传输实现的细节,如果您决定更改库或转向XML,这将破坏大量代码并使其更加困难jArray
- 返回调用代码知道并应该处理的实际对象的数组或列表。例如,您可以声明一个具有
的值对象(VO),对于id、front\u text、back\u text
中的每个JSONObject,您将创建一个新的VO并将其放入数组并返回该值jArray
public class MyVO { final public String id; final public String frontText; final public String backText; public MyVO(String id, String ft, String bt) { this.id = id; this.frontText = ft; this.backText = bt; } } List<MyVo> vos = new ArrayList<MyVO>(); JSONArray jArray = new JSONArray(result); for (int i = 0; i < jArray.length(); i++) { json_data = jArray.getJSONObject(i); vos.add(new MyVO(json_data.getString("id"), json_data.getString("front_text"), json_data.getString("back_text")); }
json\u数据引用的JSONObject。因此在最后,它总是返回jArray
中的最后一个元素
由于需要返回多个对象,因此可以:
- 只需将
jArray
返回调用函数即可。然而,这意味着调用者必须处理数据传输实现的细节,如果您决定更改库或转向XML,这将破坏大量代码并使其更加困难
- 返回调用代码知道并应该处理的实际对象的数组或列表。例如,您可以声明一个具有
id、front\u text、back\u text
的值对象(VO),对于jArray
中的每个JSONObject,您将创建一个新的VO并将其放入数组并返回该值
public class MyVO
{
final public String id;
final public String frontText;
final public String backText;
public MyVO(String id, String ft, String bt)
{
this.id = id;
this.frontText = ft;
this.backText = bt;
}
}
List<MyVo> vos = new ArrayList<MyVO>();
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
vos.add(new MyVO(json_data.getString("id"), json_data.getString("front_text"), json_data.getString("back_text"));
}
啊,我现在看到了。回答得很好,谢谢。你是一位绅士和学者。或者女士。啊,我现在看到了。回答得很好,谢谢。你是一位绅士和学者。或者女士。
for(MyVO vo : vos)
{
//vo.id or vo.frontText or vo.backText
}