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
中的最后一个元素

由于需要返回多个对象,因此可以:

  • 只需将
    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"));
    }
    

在循环的每次迭代中,您都会覆盖由
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
}