2017-06-15 115 views
0

我想JSON添加到列表視圖,的Android添加JSON到<string>

,但我不知道

我列出與這樣的列表視圖項目;

public class ListSectionActivity extends Activity { 

    private AndroidListAdapter list_adapter; 
    private ListView lv_android; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list_section); 

     DataCollection.data_arr=new ArrayList<DataCollection>(); 

     DataCollection.data_arr.add(new DataCollection("apple")); 
     DataCollection.data_arr.add(new DataCollection("car")); 


     lv_android=(ListView)findViewById(R.id.lv_android); 

     list_adapter=new AndroidListAdapter(ListSectionActivity.this, R.layout.list_item,DataCollection.data_arr); 


     ListSeparateAdapter<DataCollection> listsectionAdapter = new ListSeparateAdapter<DataCollection>(ListSectionActivity.this, 
       list_adapter, R.layout.enroll_section_list, R.id.tv_section); 

     lv_android.setAdapter(listsectionAdapter); 

    } 

} 

但我想列出來自json的項目。 我的json代碼:

@Override 
     protected void onPostExecute(String content) { 
      try { 
       JSONObject jsonObject = new JSONObject(content); 
       JSONArray jsonArray = jsonObject.getJSONArray("main"); 
       for (int i = 0; i < jsonArray.length(); i++) { 
        JSONObject c = jsonArray.getJSONObject(i); 
        JSONArray server = c.getJSONArray("home"); 
        for(int j=0; j<server.length(); j++){ 
         JSONObject serverObject = server.getJSONObject(j); 

            string rank = serverObject.getString("rank"); 


        } 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

my json;

{ 
    "main":[ 
    { 
     "home":[ 
     {"rank":"33"}, 
     {"rank":"72"}, 
     {"rank":"49"} 
     ] 
    } 
    ] 
} 

我想添加「字符串排名」到我的列表視圖。

我該怎麼做?

謝謝。

編輯:我可以添加JSON到列表視圖,但我只能列出第一個JSON項目。我的新代碼

public class ListSectionActivity extends Activity { 

    private AndroidListAdapter list_adapter; 
    private ListView lv_android; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list_section); 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       new ReadJSON().execute("url"); 
      } 
     }); 
    } 

    class ReadJSON extends AsyncTask<String, Integer, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      return readURL(params[0]); 
     } 

     @Override 
     protected void onPostExecute(String content) { 
      try { 
       JSONObject jsonObject = new JSONObject(content); 
       JSONArray jsonArray = jsonObject.getJSONArray("main"); 
       for (int i = 0; i < jsonArray.length(); i++) { 
        JSONObject c = jsonArray.getJSONObject(i); 
        JSONArray server = c.getJSONArray("home"); 
        for(int j=0; j<server.length(); j++){ 
         JSONObject serverObject = server.getJSONObject(j); 


         String rank = serverObject.getString("rank"); 

         DataCollection.data_arr=new ArrayList<DataCollection>(); 
         DataCollection.data_arr.add(new DataCollection(rank)); 
        } 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      lv_android=(ListView)findViewById(R.id.lv_android); 

      list_adapter=new AndroidListAdapter(ListSectionActivity.this, R.layout.list_item,DataCollection.data_arr); 

      ListSeparateAdapter<DataCollection> listsectionAdapter = new ListSeparateAdapter<DataCollection>(ListSectionActivity.this, 
        list_adapter, R.layout.enroll_section_list, R.id.tv_section); 

      lv_android.setAdapter(listsectionAdapter); 
     } 
    } 


    private static String readURL(String theUrl) { 
     StringBuilder content = new StringBuilder(); 
     try { 

      URL url = new URL(theUrl); 

      URLConnection urlConnection = url.openConnection(); 

      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
      String line; 

      while ((line = bufferedReader.readLine()) != null) { 
       content.append(line + "\n"); 
      } 
      bufferedReader.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return content.toString(); 
    } 

} 

數據收集

public class DataCollection { 
    public String name; 

    public static ArrayList<DataCollection> data_arr=null; 
    public DataCollection(String name){ 


     this.name=name; 
    } 
} 
+0

後JSON也在這裏 –

+0

我已經加入JSON @quicklearner – Johny

+0

使DataCollection.data_arr全球性的,不是內OnCreate中,這樣你就可以在data_arr直接添加如果後執行的是同一個類或者如果它是在不同的發送data_arr引用到asynctask,所以它可以從那裏改變。 –

回答

0

更新:你可以這樣做你onPostexecute內。將排列數組保存在列表視圖中並在適配器內使用它。

protected void onPostExecute(String content) { 
    DataCollection.data_arr=new ArrayList<DataCollection>(); 
    try { 

     JSONObject jsonObject = new JSONObject(content); 
     JSONArray jsonArray = jsonObject.getJSONArray("main"); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject c = jsonArray.getJSONObject(i); 
      JSONArray server = c.getJSONArray("home"); 
      for(int j=0; j<server.length(); j++){ 
       JSONObject serverObject = server.getJSONObject(j); 

       String rank = serverObject.getString("rank"); 

        DataCollection.data_arr.add(new DataCollection(rank)); 


      } 

     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    if(!data_arr.isEmpty()){ 

     //you can set the adapter and listview here. Something like this 
     your_list_adapter=new AndroidListAdapter(this, R.layout.list_item,data_arr); 

     your_lv_android.setAdapter(list_adapter); 


    } 
} 
+0

嗨,我更新了我的文章。請檢查一下。謝謝 – Johny

+0

好。 DataCollection類是什麼樣的?你想在你的listview的每一行顯示什麼? –

+0

我添加了DataCollection來發布。我想在列表視圖中顯示所有的等級,但我只能顯示第一等級。 – Johny