2016-07-25 70 views
0

我的服務器是用Rails 4.x編寫的,而且我用來通過API返回記錄的to_json方法正在向Android提供一個JSON數組,它看起來像這個:Android/Java:Parse來自Rails的JSON陣列

[{"id":503240,"name":"bob"},{"id":503241,"name":"Tom"}] 

它歸結爲Android罰款,我沒有問題使用它作爲一個字符串和日誌記錄。

現在我想通過數組中的每個項目循環獲取id(最終將其顯示在ListView上)。

我需要做的第一件事是「看」每個單獨的對象。所以我解析上面使用下面的代碼行:

JSONArray jsonResponse = new JSONArray(jsonString); 

它「解析」沒有錯誤,但是......當我嘗試做一些像jsonResponse [1],或jsonResponse.getObject(1 )來掌握數組的其中一個元素(例如只記錄它),但我無法越過IDE告訴我我做錯了。

如果我可以解決和操縱單個json對象,那麼我相信我在處理單個數據元素時不會遇到任何問題。這是造成問題的原因。

我對Java有點新,我被Ruby和Swift寵壞了。我錯過了一些基本的東西。我究竟做錯了什麼?

在此先感謝。

+0

的可能的複製[如何解析Java中的JSON(http://stackoverflow.com/questions/2591098/how-to-解析-JSON-在-java的) –

回答

0

Android中的JSONArray實例似乎沒有方法getObject。文檔here

我猜你需要的是:

jsonResponse.getJSONObject(1) 

因爲jsonResponseJSONObject小號

0

JSONArray數組包含一個名爲JSONObject getJSONObject(int position)方法,它返回它在JSONArray中發現類型的JSONObject的項目在你要求的位置。

現在,如果要將json數組填充到列表視圖中,應該爲listview創建一個適配器,並且每行都將包含數組中的每個項目的數據。

最常見的適配器擴展BaseAdapter類,你會發現,你將需要實現一些方法,主要是

  • getCount - 這通常會返回數組中有一個項目的數量,所以基本上當你返回0時,你什麼都看不到,但是如果你返回1或者數組的大小 - listview將有相同的行數。
  • getView - 它返回每一行的視圖,在這個方法中,你需要膨脹行的視圖(你將需要創建一個xml文件,這將是行的佈局),在你膨脹行後以及像textview,imageview這樣的所有元素,您需要填充數組中每個項目的數據。該機制以這種方式工作:此方法的參數之一是行的位置,因此當用戶滾動列表時,將調用此方法,並且位置將自動更新,以便獲取特定你只需要撥打yourJSONArray.getJSONObject(position),然後用你想要的數據填充每個文本字段。

注意的是,爲了創造出一些有用的性能自動有個東西叫ViewHolder,你應該爲了從Android的避免創建&膨脹行視圖中的每個當用戶滾動時間創造這一個。

還有一件事是,你還可以閱讀和檢查有關recycleview。

0

要通過JSONArray環路只需使用一個for循環這樣

try { 
    JSONArray array = new JSONArray("[{\"id\":503240,\"name\":\"bob\"},{\"id\":503241,\"name\":\"Tom\"}]"); 

    for (int i = 0; i < array.length(); i++) { 
     JSONObject object = array.getJSONObject(i); 

     Log.d("TAG", "Object #" + i + " id: " + object.getInt("id") + " name: " + object.getString("name")); 
    } 

} catch (JSONException e) { 
    Log.e("TAG", "Cannot parse json :", e); 
}