2016-06-13 184 views
-3

我有JSON這個樣子,如何在ArrayList中設置ArrayList的值?

{ 
    "resultFlag": true, 
    "successMessage": "Data Received", 
    "category": [ 
    { 
     "CategoryID": "4", 
     "CategoryTitle": "YSafety", 
     "CategoryImage": "", 
     "Percentage": "25%", 
     "Level": 16, 
     "Days": 60, 
     "Topic": [ 
     { 
      "TopicID": "11", 
      "TopicTitle": "Safety during Online transactions", 
      "TopicImage": "" 
     }, 
     { 
      "TopicID": "12", 
      "TopicTitle": "Anti-Theft mobile Features", 
      "TopicImage": "" 
     }, 
     { 
      "TopicID": "32", 
      "TopicTitle": "Magic of Science", 
      "TopicImage": "" 
     } 
     ], 
     "Sponsor": [ 
     { 
      "SponsorID": 1, 
      "SponsorName": "adidas", 
      "SponsorImage": "http://assets/upload/SPONSOR/adidas.jpg" 
     } 
     ] 
    }, 
    { 
     "CategoryID": "5", 
     "CategoryTitle": "YSoccer", 
     "CategoryImage": "", 
     "Percentage": "25%", 
     "Level": 16, 
     "Days": 60, 
     "Topic": [ 
     { 
      "TopicID": "13", 
      "TopicTitle": "Others", 
      "TopicImage": "" 
     }, 
     { 
      "TopicID": "14", 
      "TopicTitle": "Rules", 
      "TopicImage": "" 
     }, 
     { 
      "TopicID": "33", 
      "TopicTitle": "Magic of Nature", 
      "TopicImage": "" 
     } 
     ], 
     "Sponsor": [ 
     { 
      "SponsorID": 1, 
      "SponsorName": "adidas", 
      "SponsorImage": "http://assets/upload/SPONSOR/adidas.jpg" 
     } 
     ] 
    } ] 
} 

我的代碼裏面陣列低於獲取陣列,

static ArrayList<String> al_sponsor_image = new ArrayList<String>(); 

    static ArrayList<ArrayList<String>> al_al_topic_id = new ArrayList<ArrayList<String>>(); 

    if (resultFlag == true) { 
          String success = response.getString("successMessage"); 

          JSONArray array_category = response.getJSONArray("category"); 

          for (int i = 0; i < array_category.length(); i++) { 

           JSONObject obj_category = array_category.getJSONObject(i); 

           String category_id = obj_category.getString("CategoryID"); 
           String category_title = obj_category.getString("CategoryTitle"); 
           String category_image = obj_category.getString("CategoryImage"); 
           String percentage = obj_category.getString("Percentage"); 
           String level = obj_category.getString("Level"); 
           String days = obj_category.getString("Days"); 

           // al_category_id.add(category_id); 
           al_category_title.add(category_title); 
           // al_category_image.add(category_image); 
           al_percentage.add(percentage); 
           al_level.add(level); 
           al_days.add(days); 

           JSONArray array_topic = obj_category.getJSONArray("Topic"); 

           JSONArray array_sponsor = obj_category.getJSONArray("Sponsor"); 

           al_topic_id.clear(); 
           al_topic_title.clear(); 
           al_topic_image.clear(); 

           al_sponsor_id.clear(); 
           al_sponsor_name.clear(); 
           al_sponsor_image.clear(); 

           for (int j = 0; j < array_topic.length(); j++) { 

            JSONObject obj_topic = array_topic.getJSONObject(j); 

            String topic_id = obj_topic.getString("TopicID"); 
            String topic_title = obj_topic.getString("TopicTitle"); 
            String topic_image = obj_topic.getString("TopicImage"); 

            al_topic_id.add(topic_id); 
            al_topic_title.add(topic_title); 
            al_topic_image.add(topic_image); 

            /* String[] st_sub_array_topic_title = al_topic_title.toArray(new String[al_topic_title.size()]); 
            String[] st_sub_array_topic_image = al_topic_image.toArray(new String[al_topic_image.size()]); 

            st_array_topic_title = new String[i][]; 
            st_array_topic_title[j] = st_sub_array_topic_title; 

            int[] itemImageList = new int[j]; 
            itemImageList[j] = R.drawable.dummy_flower; 
            st_array_topic_image[j] = itemImageList;*/ 

            /*{itemImageList, itemImageList, itemImageList, itemImageList, itemImageList, itemImageList, itemImageList, itemImageList};*/ 
            /*{R.drawable.dummy_flower, R.drawable.dummy_flower, R.drawable.dummy_flower, R.drawable.dummy_flower, R.drawable.dummy_flower, R.drawable.dummy_flower, R.drawable.dummy_flower, R.drawable.dummy_flower, R.drawable.dummy_flower, R.drawable.dummy_flower};*/ 

            // st_array_topic_image = new String[i][]; 
            // st_array_topic_image[j] = st_sub_array_topic_image; 

           } 

           al_al_topic_id.add(i, al_topic_id); 
           al_al_topic_title.add(i, al_topic_title); 
           al_al_topic_image.add(i, al_topic_image); 

           System.out.println("al_al_topic_id : " + al_al_topic_id); 
           System.out.println("al_al_topic_title : " + al_al_topic_title); 
           System.out.println("al_al_topic_image : " + al_al_topic_image); 

           //  String[][] st_array_topic_image 

           for (int j = 0; j < array_sponsor.length(); j++) { 

            JSONObject obj_sponsor = array_sponsor.getJSONObject(j); 

            String sponsor_id = obj_sponsor.getString("SponsorID"); 
            String sponsor_name = obj_sponsor.getString("SponsorName"); 
            String sponsor_image = obj_sponsor.getString("SponsorImage"); 

            al_sponsor_id.add(sponsor_id); 
            al_sponsor_name.add(sponsor_name); 
            al_sponsor_image.add(sponsor_image); 

            /*String[] st_sub_array_sponsor_name = al_sponsor_name.toArray(new String[al_sponsor_name.size()]); 
            String[] st_sub_array_sponsor_image = al_sponsor_image.toArray(new String[al_sponsor_image.size()]); 

            st_array_sponsor_name = new String[i][]; 
            st_array_sponsor_name[j] = st_sub_array_sponsor_name; 

            st_array_sponsor_image = new String[i][]; 
            st_array_sponsor_image[j] = st_sub_array_sponsor_image;*/ 

           } 

           al_al_sponsor_id.add(i, al_sponsor_id); 
           al_al_sponsor_name.add(i, al_sponsor_name); 
           al_al_sponsor_image.add(i, al_sponsor_image); 

           System.out.println("al_al_sponsor_id : " + al_al_sponsor_id); 
           System.out.println("al_al_sponsor_name : " + al_al_sponsor_name); 
           System.out.println("al_al_sponsor_image : " + al_al_sponsor_image); 

          } 

         /* String[] st_array_category_title = al_category_title.toArray(new String[al_category_title.size()]); 
          String[] st_array_percentage = al_percentage.toArray(new String[al_percentage.size()]); 
          String[] st_array_level = al_level.toArray(new String[al_level.size()]); 
          String[] st_array_days = al_days.toArray(new String[al_days.size()]); */ 

          rv_learning_cards.setAdapter(new AdapterLearningCards(activity, al_category_title, al_percentage, al_level, al_days, al_al_topic_image, al_al_topic_title, al_al_sponsor_image)); 

         } 

當我打印al_al_topic_title,它取代LAT陣列中的所有陣列...

al_al_topic_title : [[Travel and Activity Gear, Types of Activities], [Travel and Activity Gear, Types of Activities], [Travel and Activity Gear, Types of Activities], [Travel and Activity Gear, Types of Activities], [Travel and Activity Gear, Types of Activities], [Travel and Activity Gear, Types of Activities], [Travel and Activity Gear, Types of Activities], [Travel and Activity Gear, Types of Activities], [Travel and Activity Gear, Types of Activities]] 

al_al_topic_title : [[Others, Others], [Others, Others], [Others, Others], [Others, Others], [Others, Others], [Others, Others], [Others, Others], [Others, Others], [Others, Others], [Others, Others]] 

任何人都可以給我suggetion嗎?

+0

爲什麼使這個複雜的ArrayList > ??你爲什麼不用相同的課程? ArrayList ....這將是一個更好的方法 –

回答

0

你的基本的方法來解決問題是不對的,你可以很容易地與bean類Category.java由具有

public class Category 
{ 
    String CategoryID; 
    String CategoryTitle; 
    String CategoryImage; 
    String Percentage; 
    String Level; 
    String Days; 
    ArrayList<Topic> topic; 

    ....... 
    Getter and setter methods here 
    ......... 
} 

class Topic 
{ 
    String TopicID; 
    String TopicTitle; 
    String TopicImage; 
    ....... 
    Getter and setter methods here 
    ......... 

} 

現在解析的數據添加到ArrayList<Category> category做到這一點。那麼上面的問題就不會出現,代碼會更清楚地被其他開發人員所理解。

+0

我也試過這個,它也替換了最後一個元素的所有位置 –

0

你的代碼是潛在的越野車,你可以找到任何你在你的JSON希望以這樣的方式

轉到http://www.jsonschema2pojo.org/網站並粘貼您的JSON (這個網站生成Java類您的JSON(POJO))

複製java文件到您的項目

您應該使用序列化/反序列化庫,供您JSON字符串轉換成Java對象 我建議你GSON

進口GSON到您的項目寫在這之後代碼

Gson gson = new Gson(); 
    YOUR_GENERETED CLASS response = gson.fromJson(YOUR_JSON_STRING ,YOUR_GENERETED CLASS.class); 

最後你可以從響應對象中獲取你想要的東西

+0

這實質上是一個僅鏈接的答案,因爲如果鏈接子彈1死了這個答案是沒用的。請將此答案修改爲不使用非現場資源,因爲只有鏈接的答案可能會被刪除。 – Adriaan

0

使用Gson來解析你的JSON響應,而不是手動解析它。它會減少很多問題。

Gson是一個開源庫,用於對JSON進行序列化和反序列化java對象。

您需要爲您的JSON響應創建普通的java對象類,如下所示。

CategoryJsonResponse.java

class CategoryJsonResponse { 
boolean resultFlag; 
String successMessage; 
ArrayList<Category> category;} 

Category.java

class Category { 
int CategoryID; 
String CategoryTitle; 
String CategoryImage; 
String Percentage; 
int Level; 
int Days; 
ArrayList<Topic> Topic; 
ArrayList<Sponsor> Sponsor;} 

Sponser。java的

class Sponsor { 
int SponsorID; 
String SponsorName; 
String SponsorImage;} 

Topic.java

class Topic { 
int TopicID; 
String TopicTitle; 
String TopicImage;} 

現在你需要編寫的代碼如下很少線來分析你的JSON響應。我假設我們在「響應」變量中獲得了JSON響應。

GsonBuilder gsonBuilder = new GsonBuilder(); 
Gson gson = gsonBuilder.create(); 

CategoryJsonResponse categoryJsonResponse = gson.fromJson(response.toString(), CategoryJsonResponse .class); 

現在你有categoryJsonResponse對象內整個JSON響應,並可以讀取普通Java方式的任意值。最後一點。要在您的項目中添加GSON,您只需在您的應用級別gradle文件中添加以下依賴關係。

compile 'com.google.code.gson:gson:2.2.4' 
相關問題