2014-08-27 2 views
0

만 마지막 개체 이름을 얻기 나는 parsingJSON입니다 : 내가 technologyimages JSON 배열을 구문 분석은 ListView에

{ 
"technology" : [ 

{ 
"title" : "Android", 
"images" : [ 
{ 
"name" : "Android - I" 
}, 
{ 
"name" : "Android - II" 
}, 
{ 
"name" : "Android - III" 
} 
] 
} 

] 
} 

,하지만 난 안드로이드 그냥 목록보기에서 마지막 개체 이름을 얻기에 탭 않을 때마다, 이 경우 "Android - III"?

그럼 내가 알아야 할 이유는 무엇입니까?

TechnologyActivity.java:-

JSONObject jsonObject = new JSONObject(data); 
    JSONArray techArray = jsonObject.getJSONArray("technology"); 
     for(int i=0; i<techArray.length(); i++) 
     { 
      JSONObject jObject = techArray.getJSONObject(i); 
      Technology tech = new Technology(); 
      tech.setTitle(jObject.getString("title")); 
      Log.d("technology-title:", jObject.getString("title")); 

      JSONArray imagesArray = jObject.getJSONArray("images"); 
       for(int j=0; j<imagesArray.length(); j++) 
       { 
       JSONObject imagesObject = imagesArray.getJSONObject(j); 
       SubTech images = new SubTech(); 
       images.setName(imagesObject.getString("name")); 
       Log.d("technology-name", imagesObject.getString("name")); 

       arrayListImages = new ArrayList<SubTech>(); 
       arrayListImages.add(images); 
       } 
      tech.setImages(arrayListImages); 
      arrayList.add(tech); 
     } 

SubTechActivity.java:-

public class SubTechActivity extends Activity { 

    ArrayList<Technology> arrayList; 
    Technology tech; 
    SubTechAdapter adapter; 
    ArrayList<SubTech> arrayListSubTech; 
    int currentPosition ; 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_technology); 

     Bundle bundle = getIntent().getExtras(); 

     arrayList = (ArrayList<Technology>) bundle.getSerializable("data"); 
     currentPosition = bundle.getInt("current"); 

     tech = arrayList.get(currentPosition); 

     arrayListSubTech = tech.getImages(); 

     ListView listview = (ListView)findViewById(R.id.list); 
     adapter = new SubTechAdapter(SubTechActivity.this, R.layout.adapter_technology, arrayListSubTech); 

     listview.setAdapter(adapter); 

    } 
} 
+0

post'technologyactivity.java' 그리고 필요한 항목 자체를 전달할 때 arraylist를 전달해야하는 이유 – Raghunandan

+0

'Technology' 클래스가 parcelable을 구현합니까? – Raghunandan

+0

TechActivity.java에 대한 전체 코드를 게시했지만 일부 이유 때문에 전체 arraylist를 전달해야합니다. – Mysterious

답변

1

당신이 매번 루프의 내부 arrayListImages = new ArrayList<SubTech>();의 새로운 인스턴스를 생성하기 때문에이 일어나고, 그것은 한 번만 생성되어야하고 루프 밖에서 너무 생성되어야합니다.

arrayListImages = new ArrayList<SubTech>(); 

    for(int j=0; j<imagesArray.length(); j++) 
     { 
      JSONObject imagesObject = imagesArray.getJSONObject(j); 
      SubTech images = new SubTech(); 
      images.setName(imagesObject.getString("name")); 
      Log.d("technology-name", imagesObject.getString("name")); 

      arrayListImages.add(images); 
     } 
+0

예, 맞았습니다. arrayListImages = new ArrayList (); before for 루프와 완료! – Mysterious