2017-08-28 21 views
-1

JSON配列を配列リストCategoryと入れ子になったArraylist SubCategoryにループしようとしています。入れ子のforループ内のarraylistにオブジェクトを追加する

私の問題は、私のリストに最初のSubCategoryデータだけでなく、2番目のSubCategoryデータも入力されるということです。

例えば、私が欲しい:

1st category [Apple, Kiwi] 
2nd category [Mango, Banana] 

しかし、その代わりに、私は、

第二のカテゴリを取得するには、[Apple,Kiwi,Mango,Banana]として取り込みます。

ArrayList<Category> categoryName=new ArrayList<Category>(); 
ArrayList<ArrayList<SubCategory>> subCategoryName = new ArrayList<ArrayList<SubCategory>>(); 
ArrayList<Integer> subCategoryCount = new ArrayList<Integer>(); 

ArrayList<SubCategory> subCategoryMatches = new ArrayList<SubCategory>(); 
try { 
    // Parsing json array response 
    // loop through each json object 

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

     JSONObject allCategory = (JSONObject) response 
       .get(i); 

     int id = allCategory.getInt("mcatid"); 
     String description = allCategory.getString("description"); 

     Category categoryDetails = new Category(); 
     categoryDetails.setCatCode(id); 
     categoryDetails.setCatName(description); 
     category_name.add(categoryDetails); 

     //Log.i(TAG, String.valueOf(description)); 

     JSONArray allSubCategory = allCategory 
       .getJSONArray("Subcatergory"); 

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

      JSONObject jsonObject = allSubCategory.getJSONObject(j); 

      String subCatId = jsonObject.getString("id"); 

      String subDescription = jsonObject.getString("description"); 

      // retrieve the values like this so on.. 

      //Log.i(TAG, String.valueOf(subDescription)); 


      SubCategory subCategoryMatch = new SubCategory(); 
      subCategoryMatch.setSubCatName(subDescription); 
      subCategoryMatch.setSubCatCode(subCatId); 
      subCategoryMatches.add(subCategoryMatch); 

     } 

     subcategory_name.add(subCategoryMatches); 
     subCatCount.add(subCategoryMatches.size()); 
    } 
+1

私のdownvoteではありませんが、私はこれも読んでいません。あなたの問題を私たちに明確に説明するのはあなた次第です。すべてのコードが本当に必要ですか?多分、そうではないかもしれませんが、いずれにしても問題がどこにあるのかを強調する必要があります。 –

+0

あなたはすでにPOJOクラスを2つ持っているようです... GsonやJacksonを使ってこれをすべて解析してみませんか? –

+0

[リンク](https://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/) – MehmanBashirov

答えて

0

あなたは同じsubCategoryMatchesリスト参照に追加している、とあなたが一つのオブジェクト内のすべてのデータを取得します。

追加するループの前に新しいリストが必要です。

ArrayList<SubCategory> subCategoryMatches; 

try { 
    // Parsing json array response 
    // loop through each json object 

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

     // New list 
     subCategoryMatches = new ArrayList<SubCategory>(); 

     // Loop and add 
     for (int j = 0; j < allSubCategory.length(); j++) { 
      ... 
      subCategoryMatches.add(subCategoryMatch); 
     } 

     // Add new list to outer list 
     subcategory_name.add(subCategoryMatches); 
    } 
} 
+0

私はアンドロイド初心者です。私はそのリストを作成する必要がありますどのように項目を追加する。ありがとう – Naseem

+0

あなたはすでにこの正確なコードを持っています。 '...'は完全に同じ署名を持つループの後の削除されたコードです。すでに書いたように、 'new ArrayList <>'は以前の行になります。私はあなたの全体のコードをコピーするだけで違いを表示することはありません –

+0

私は入れsubCategoryMatches = new ArrayList (); 上記のallSubCategoryのループアプリケーションがクラッシュするのは、カテゴリをクリックしたときです。 – Naseem

関連する問題