PHP / Android和JSONObject;我似乎只能访问最后一个元素

| 我有一个设置,它返回的信息量可能不错。这是logcat:
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;
它将结果转换成一个jsonObject,我可以使用它。 所以这是之前的步骤,php中的查询部分:
    include \'connectMySQL.php\';

    mysql_select_db(\"card_db\");
    $q=mysql_query(\"SELECT * FROM \".$packname);

    while($e=mysql_fetch_assoc($q)){
        $output[]=$e;
    }
    print(json_encode($output));
    mysql_close();
问题是我似乎只能访问FINAL ... eh行。也就是说,在以上数据中,我似乎只能访问id:6行。 我正在查看auto_complete和JSONOBJECT,但是目前我没有足够的经验来解决这个问题,而且已经很晚了。 关于如何在Java中循环遍历jsonObject的任何想法? 让我花点时间分析一下结构,然后再上交。我对JSON不太了解,但是它看起来像这样: 我用已设置的表查询数据库,等等。 它返回数据行。 我想我的问题是,如何将一行键值对编码为JSON对象,如何访问不同的“行”?     
已邀请:
您将在循环的每次迭代中覆盖由
json_data
引用的JSONObject。因此,最后总是返回returns4ѭ中的最后一个元素。 由于需要返回多个对象,因此可以: 只需将
jArray
返回到调用函数。但是,这意味着调用者将不得不处理数据传输实现的详细信息,并且如果您决定更改库或转移到XML,它将破坏很多代码并使它变得更加困难。 返回调用代码知道并应处理的实际对象的数组或列表。例如,您可以声明一个具有
id, front_text, back_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\"));
}
在调用代码中,然后可以遍历VO:
for(MyVO vo : vos)
{
    //vo.id or vo.frontText or vo.backText
}
    

要回复问题请先登录注册