0
List < Response > Data = new ArrayList < Response > ();
Response object = null;

JSONObject documentRoot = new JSONObject(result);
JSONArray documentChild = documentRoot.getJSONArray("Main");
JSONArray allergyArray = null;
JSONArray vitalsArray = null;

for (int i = 0; i < documentChild.length(); i++) {
    child = documentChild.getJSONObject(i);
    if (Condition1) {
        allergyArray = child.getJSONArray("Allergy");
    } else if {
        vitalsArray = child.getJSONArray("Vitals");
    }
}

object = new Response(); // POJO class

if (null != allergyArray) {
    for (int i = 0; i < allergyArray.length(); i++) {
        object.setCap(allergyArray.getJSONObject(i).getString("Cap"));
        object.setRea(allergyArray.getJSONObject(i).getString("Rea"));
    }
}

if (null != vitalsArray) {
    for (int i = 0; i < vitalsArray.length(); i++) {
        object.setName(vitalsArray.getJSONObject(i).getString("Name"));
        object.setMedic(vitalsArray.getJSONObject(i).getString("Medic"));
    }
}

Data.add(object);

結果を反復して印刷しようとすると、最後に追加されたアイテムのみが印刷されます。

public void onLoadComplete(List < Response > item) {    
    for (int i = 0; i < item.size(); i++) {
        Log.d("Get", item.get(i).getCap()); // I get only the last item which is added.
    }      
}

リスト オブジェクトが onLoadComplete 関数に渡されるのはなぜですか? POJO クラスに最後に追加された項目しか含まれていません。

4

1 に答える 1

1

ループでは、各反復で同じオブジェクトに値 (cap、rea、name & medic) を設定します。これは、反復が完了した後に最後の値のみが設定されることを意味します。

値ごとに、新しいオブジェクトを作成する必要があります。これは基本的な例です。安全のためにいくつかのチェックを追加する必要があります。

if (null != allergyArray && null != vitalsArray)
{
    for (int i = 0; i < allergyArray.length() && i < vitalsArray.length(); ++i)
    {
        object = new Response(); // POJO class
        object.setCap(allergyArray.getJSONObject(i).getString("Cap"));
        object.setRea(allergyArray.getJSONObject(i).getString("Rea"));
        object.setName(vitalsArray.getJSONObject(i).getString("Name"));
        object.setMedic(vitalsArray.getJSONObject(i).getString("Medic"));

        Data.add(object);
    }
}
于 2013-04-14T04:51:27.387 に答える