2011-04-18 17 views
1

我有一個設置,它返回一個可能體面的信息量。這裏是logcat:PHP/Android和JSONObject;我似乎只能訪問最後一個元素

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(); 

問題是,我似乎只是有機會獲得最後的...誒行。也就是說,在上面的數據中,我似乎只能訪問id:6行。

我正在查看auto_complete和JSONOBJECT,但目前我沒有足夠的經驗來弄清楚這個問題,而且已經很晚了。

關於如何遍歷java中的jsonObject的任何想法? 。

讓我花一分鐘,並在轉彎之前分析第二個結構,我不知道很多關於JSON,但這裏是什麼樣子:

我與表查詢數據庫,我已經設置,等等等等。 它返回數據行。 我想我的問題是如何將一行鍵值對編碼成JSON對象,以及如何訪問不同的'行'?

回答

1

在循環的每次迭代中,您正在覆蓋由json_data引用的JSONObject。所以最後,它總是返回jArray中的最後一個元素。

,因爲你需要返回多個對象,你可以:

  • 簡單地返回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")); 
    } 
    

    調用代碼,然後你可以去了聲控錄音:

    for(MyVO vo : vos) 
    { 
        //vo.id or vo.frontText or vo.backText 
    } 
    
+0

AHHHHH現在我明白了。神奇的答案,謝謝。你是一個紳士和學者。還是女士。 – Danedo 2011-04-18 21:19:07

+0

不客氣。而不是女士:) – 2011-04-18 22:02:04

相關問題