2017-01-03 14 views
2

このコードチャンクを使用して、JSONObjectに値を格納して、それを反復してフロントエンドでレンダリングするコードチャンクを使用しました。java.util.concurrentModification JSONObjectの反復処理中の例外

 JSONObject dlCovs = jsonObject.getJSONObject("result").getJSONObject("cov_details"); 
     Iterator x = dlCovs.keys(); 
     while (x.hasNext()){ 
      String key1 = (String) x.next(); 
      String value1 = dlCovs.optString(key1); 
      dlCovs.put("covabbrv",key1); 
      dlCovs.put("dcIssuedt",value1); 
      dlCovs.put("vecatg",key1); 
      dlData.put("dlCovs", dlCovs); 
     } 

     /* dlCovs.put("covabbrv",cov); 
     dlCovs.put("issue_date",issue_date);*/ 
     dlObj.put("status","valid"); 
     dlData.put("dlCovs", dlCovs); 
     dlData.put("status","valid"); 

私はjava.util.ConcurrentModificationExceptionがを取得していますループ、私はそれをデバッグしようとしている場合は、それがdlCovs」(dlData.putの値を記憶しているにも自分のいる間にデータを反復しながら、 "、dlCovs)、2回目の反復のために来るとすぐにエラーをスローします。 私はすべてのヘルプは非常にかなりの量になる

"cov_details": { 
    "MCWG": "NA", 
    "3WTR": "NA", 
    "PSV BUS": "NA", 
    "LMV": "NA", 
    "INVCRG": "NA" 
}, 

JSON値を以下ましたが、よく事前 でのおかげであなたは、そのエントリを反復しながらマップを変更しているここ

答えて

5

をコードを入力してください。あなたはそれをすることはできません。

はその後、別のマップにアイテムを入れて、その後、あなたの "メイン" のマップにそれを追加します。また、

Map newEntries = new HashMap(); 
    Iterator x = dlCovs.keys(); 
    while (x.hasNext()){ 
    String key1 = (String) x.next(); 
    String value1 = dlCovs.optString(key1); 
    newEntries.put("covabbrv",key1); 
    // .. etc 
    } 

    dlCovs.putAll(newEntries); 

don't use raw typesを。あなたが変更することはできませんイテレータを使用してマップを反復処理しながら

Map<String, String> newEntries = new HashMap<>(); 
+0

ループ上で反復処理した後にd valを置いても、同じエラーが発生しています。コードの塊 dlCovs = jsonObject.getJSONObject( "result") .getJSONObject( "cov_details"); イテレータx = dlCovs.keys(); while(x.hasNext()){ String key1 =(String)x.next(); 文字列value1 = dlCovs.optString(key1); dlCovs.put( "covabbrv"、key1); dlCovs.put( "dcIssuedt"、value1); dlCovs.put( "vecatg"、key1); } dlData.put( "dlCovs"、dlCovs); – Mavericks

+0

あなたは 'dlCovs.keys()'を繰り返しながら、そのループの中で 'dlCovs.put'を呼び出しています。 –

+0

Andy、間違いを指摘してくれてありがとう、それは私のために働いた。どうもありがとう。 – Mavericks

0

:同様

String key1 = x.next(); 

:あなたはキャストを必要としない

Iterator<String> x = dlCovs.keys(); 

:あなたのようなxを宣言する必要があります基礎となる地図。基礎となる構造から直接読み取るフェイル・ファスト・イテレータと呼ばれます。 Javaはマップに加えられた構造的変更の数をカウントするmodsという内部フラグを保持しています。イテレータがイテレート中に変更するモッズを見つけた場合は、コンカレント変更例外がスローされます。 Javaの同時ハッシュマップでは、フェールセーフイテレータを実装することで問題を解決します。主なことは、反復中にマップの構造を変更できないということです

+0

説明してくれてありがとうございましたが、同時に今私は上記と同じ問題を抱えています。問題はそれがJSONデータで述べたように他のリストを反復しながらObjectの最後の値だけを保存していることですデバッグ私は "INVCRG": "NA"がdlCovsの値に格納されていることを確認する – Mavericks