2014-01-10 74 views
-2

我無法讀取json數據並將其綁定到andord.list視圖中的列表視圖中,但doctype的值總是與v4一起顯示。請告訴我我做錯了什麼用code.i附加解析json數據的代碼。無法解析json對象中的json對象

[ 
{ 
id: "HT20140109105317640", 
basePath: "D:\img", 
lstDocType: [ 
{ 
doctype: "PP1", 
imageName: "CH100610_002_003_PP1.jpg", 
imageupload: false 
}, 
{ 
doctype: "PP2", 
imageName: "CH100610_002_003_PP2.jpg", 
imageupload: false 
}, 
{ 
doctype: "V1", 
imageName: "CH100610_002_003_V1.jpg", 
imageupload: false 
}, 
{ 
doctype: "V2", 
imageName: "CH100610_002_003_V2.jpg", 
imageupload: false 
}, 
{ 
doctype: "V3", 
imageName: "CH100610_002_003_V3.jpg", 
imageupload: false 
}, 
{ 
doctype: "V4", 
imageName: "CH100610_002_003_V4.jpg", 
imageupload: false 
} 
], 
f_FNAME: "SANJAY", 
f_FORM: "002", 
f_TCD: "CH100610", 
f_TNO: "003", 
f_LNAME: "NANKANI" 
}, 
{}, 
{}, 
{}, 
{}, 
{}, 
{}, 
{}, 
{}, 
{} 
] 

這裏是解析JSON數據

public class DisplayList extends AsyncTask<String, String, String> 
    { 


     @Override 
     protected void onPreExecute() 
     { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      pd=new ProgressDialog(MainActivity.this); 
      pd.setMessage("Please Wait List Is Loading"); 
      pd.setCancelable(false); 
      pd.show(); 

     } 

     @Override 
     protected String doInBackground(String... params) 
     { 
      // TODO Auto-generated method stub 
      try 
      { 
       // create instance of json data class 
       TourList tl=new TourList(); 
       jarray=tl.getJsonFromUrl("http://192.168.1.239:8080/VisaDocUpload/historycon/selectbycount/0/10"); 
       for(int i=0;i<jarray.length();i++) 
       { 
        HashMap<String,String> map=new HashMap<String,String>(); 
        JSONObject c=jarray.getJSONObject(i); 
        id=c.getString(KEY_ID); 

        JSONArray doct=c.getJSONArray("lstDocType"); 
        for(int j=0;j<doct.length();j++) 
        { 
         JSONObject jo=doct.getJSONObject(j); 
         doctype=jo.getString(KEY_DOCTYPE); 


        } 

        map.put(KEY_ID,id); 
        map.put(KEY_DOCTYPE,doctype); 
        arraylist.add(map); 
       } 



      } 
      catch(Exception e) 
      { 
       Log.d("In Back",""); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) 
     { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      pd.dismiss(); 
      lv.setAdapter(new MyTourDisplay(MainActivity.this,arraylist)); 
      Toast.makeText(getApplicationContext(), ""+id+doctype,Toast.LENGTH_LONG).show(); 

     } 


    } 

回答

1

解析是正確的,問題是相關的事實,你是裏面的更內部的循環只分配DOCTYPE所以,在地圖裏面的代碼,你把最後一個值分配給DOCTYPE

private class Holder { 
    public ArrayList<String>() docLst; 
    // possible more kind of elements 
} 

然後:

Holder holder = new Holder(); 
holder.docLst = new ArrayList<String>(); 

for(int j=0;j<doct.length();j++) { 
    JSONObject jo=doct.getJSONObject(j); 
    doctype=jo.getString(KEY_DOCTYPE); 
    holder.docLst.add(doctype); 
} 

map.put(id, holder); 
當然

你的HashMap必須是類型<String, Holder>

+0

我也把地圖放在循環中,但它顯示相同的輸出 –

+0

你把map.put(KEY_ID,ID); ?如果你這樣做,它不會提供服務,因爲你使用相同的鍵添加不同的元素,並且鍵在地圖中是唯一的。只要告訴我你想達到什麼 – Blackbelt

+0

我想顯示doctype值,但它顯示了doctype的v4值。但doctype的值對於每個position.it只顯示最後的位置值 –

0

使用這種格式的JSON的:

{ 
    "array" : [ 
    { 
    id: "HT20140109105317640", 
    basePath: "D:\img", 
    lstDocType: [ 
      { 
      doctype: "PP1", 
      imageName: "CH100610_002_003_PP1.jpg", 
      imageupload: false 
      }, 
      { 
      doctype: "PP2", 
      imageName: "CH100610_002_003_PP2.jpg", 
      imageupload: false 
      } 
     ] 
    } 
    ] 
} 

然後繼續像這樣:

json=tl.getJsonFromUrl("http://192.168.1.239:8080/VisaDocUpload/historycon/selectbycount/0/10"); 

JSONObject jsonObj = new JSONObject(json); 
JSONArray jarray = jsonObj.getJSONArray("array"); 
for(int i=0;i<jarray.length();i++) 
{ 
//exec your code here 

} 

我不知道這作品imageupload:不帶引號的錯誤。