2012-09-11 82 views
0

我已解析JSON文件,然後將數組從JSON保存到字符串並將其傳遞到下一個要解析的活動,但我有一個問題,即listview僅顯示第一組位置而不是任何其他人。Android JSON不解析所有數據

JSON段:

{ 
title: World Rover Scout Moot 
locations: [ 
{ 
address: Kandersteg, Switzerland 
latitude: 46.483742 
longitude: 7.663157 
name: 01st World Rover Moot (1921) 
} 
{ 
address: Ingarö, Sweden 
latitude: 59.25235 
longitude: 18.465536 
name: 02nd World Rover Moot (1925) 
} 
{ 
address: Monzie, Scotland 
latitude: 56.404182 
longitude: -3.818855 
name: 03rd World Rover Moot (1939) 
} 
{ 
address: Skjak, Norway 
latitude: 61.898525 
longitude: 8.369957 
name: 04th World Rover Moot (1949) 
} 
{ 
address: Kandersteg, Switzerland 
latitude: 46.483742 
longitude: 7.663157 
name: 05th World Rover Moot (1953) 
} 
{ 
address: Sutton Coldfield, UK 
latitude: 52.558769 
longitude: -1.802851 
name: 06th World Rover Moot (1957) 
} 
{ 
address: Melbourne, Australia 
latitude: -37.814251 
longitude: 144.963165 
name: 07th World Rover Moot (1961) 
} 
{ 
address: Melbourne, Australia 
latitude: -37.814251 
longitude: 144.963165 
name: 08th World Rover Moot (1990-91) 
} 
{ 
address: Kandersteg, Switzerland 
latitude: 46.483669 
longitude: 7.663095 
name: 09th World Rover Moot (1953) 
} 
{ 
address: Ransberg, Sweden 
latitude: 58.454601 
longitude: 14.226012 
name: 10th World Moot (1996) 
} 
{ 
address: Mexico 
latitude: 19.691061 
longitude: -98.805557 
name: 11th World Scout Moot (2000) 
} 
{ 
address: Hualien, Taiwan 
latitude: 23.987925 
longitude: 121.612175 
name: 12th World Scout Moot (2004) 
} 
{ 
address: Nairobi, Kenya 
latitude: -1.312558 
longitude: 36.769932 
name: 13th World Scout Moot 
} 
] 
}, 

{ 
title: World Scout Interreligious Symposium 
locations: [ 
{ 
address: Kampala, Uganda 
latitude: 0.239059 
longitude: 32.623615 
name: 3rd World Scout Interreligious Symposium 
} 
] 
} 

源代碼:

public class SingleMapSet extends Activity { 
final String KEY_MAPS = "maps"; 

static final String KEY_MAPSETMAPSET = ""; 
static final String KEY_MAPNAME = "name"; 
static final String KEY_MAPLOCATION = "address"; 
static final String KEY_MAPLONG = "longitude"; 
static final String KEY_MAPLAT = "latitude"; 
ListView list; 
org.scouts.android.maps.MapsetAdapter adapter; 


/** Called when the activity is first created. */ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.playlists); 
    TextView lblTitle = (TextView) findViewById(R.id.actionbar); 
    lblTitle.setText(R.string.maps); 

    Intent in = getIntent(); 
    String mapset = in.getStringExtra(KEY_MAPSETMAPSET); 
    mapset = mapset.substring(1); 
    mapset = mapset.substring(0, mapset.length() - 1); 



    final ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 


    String jsonString = null; 
    try { 
     jsonString = mapset; 
    } catch (IllegalStateException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    JSONObject json = null; 
    try { 
     json = new JSONObject(jsonString); 
    } catch (JSONException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

      try{ 




       JSONArray jsonArray = json.getJSONArray("locations"); 
       for(int i=0;i < jsonArray.length();i++){      


      HashMap<String, String> map = new HashMap<String, String>(); 
      JSONObject maps = jsonArray.getJSONObject(i); 

      map.put("id", String.valueOf(i)); 
      map.put(KEY_MAPNAME, maps.getString(KEY_MAPNAME)); 
      map.put(KEY_MAPLOCATION, maps.getString(KEY_MAPLOCATION)); 
      map.put(KEY_MAPLONG, maps.getString("longitude")); 
      map.put(KEY_MAPLAT, maps.getString("latitude")); 

      mylist.add(map); 


     } 
      }catch(JSONException e)  { 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
      } 
      list=(ListView)findViewById(R.id.playlistlist);   
      adapter=new org.scouts.android.maps.MapsetAdapter (this, mylist);   
      list.setAdapter(adapter); 
      list.setOnItemClickListener(new OnItemClickListener() { 

       public void onItemClick(AdapterView<?> parent, View view, int position, 
         long id) { 

        HashMap<String, String> map = mylist.get(position); 

        Intent in = new Intent(SingleMapSet.this, org.scouts.android.maps.SingleMapSet.class); 
        in.putExtra(KEY_MAPNAME, map.get(KEY_MAPNAME)); 
        in.putExtra(KEY_MAPLOCATION, map.get(KEY_MAPLOCATION)); 
        in.putExtra(KEY_MAPLONG, map.get(KEY_MAPLONG)); 
        in.putExtra(KEY_MAPLAT, map.get(KEY_MAPLAT)); 

       startActivity(in); 


      } 
     }); 
    } 








       };  ; 
+0

1 /你是什麼「的第一組位置」是什麼意思? 2 /你有一個堆棧跟蹤的實際錯誤? – njzk2

+0

@ njzk2只有第一組地點,即流浪者模擬,而不是宗座間研討會,但我需要兩個被解析 – SquiresSquire

+0

這是有道理的。這可能是因爲你實際上沒有訪問任何地方 – njzk2

回答

1

首先刪除該行 mapset = mapset.substring(1); mapset = mapset.substring(0,mapset.length() - 1);

,並嘗試這種方式

JSONObject jOBj; 
JSONArray jsonArray; 
JSONArray jarray=new JSONArray(mapset); 

for(int j=0;j<jarray.length();j++){ 
     jOBj=jarray.getJSONObject(j) 
     jsonArray = jOBj.getJSONArray("locations"); 
     for(int i=0;i < jsonArray.length();i++){      


      HashMap<String, String> map = new HashMap<String, String>(); 
      JSONObject maps = jsonArray.getJSONObject(i); 

      map.put("id", String.valueOf(i)); 
      map.put(KEY_MAPNAME, maps.getString(KEY_MAPNAME)); 
      map.put(KEY_MAPLOCATION, maps.getString(KEY_MAPLOCATION)); 
      map.put(KEY_MAPLONG, maps.getString("longitude")); 
      map.put(KEY_MAPLAT, maps.getString("latitude")); 

      mylist.add(map); 


    } 


} 
+0

謝謝你這麼做刪除[]! – SquiresSquire

-1

你必須使用的AsyncTask解析json的。還有一些分析鏈接可以幫助你

Link1

+0

考慮到json的大小,我不認爲這是必要的 – njzk2

+0

@ njzk2甚至不是json的一半! – SquiresSquire

0

首先,它似乎有些事情是在你的JSON失蹤。它似乎是一個數組,但[]不存在。 (?是你在開始時與2子刪除什麼的)

然後,你可能會做的是一樣的東西:

JSONArray json = new JSONArray(jsonString); // Note that it is supposed to be an Array 

然後

for(int j=0;j < json.length();j++){ 
    JSONArray jsonArray = json.getJSONObject(j).getJSONArray("location"); 
    // From here proceed as you did 
+0

它提出了一個錯誤! http://pastebin.com/wuh7b3Ka,是的,我在開頭 – SquiresSquire

-1

我不知道,你的意思是說「第一套」。你的意思是mylist對象的第一個元素? (就像position = 0一直?)

「jsonarray」的大小是否正確?

您可以嘗試使用google gson庫代替。它將數據解析到指定的對象,或者在這種情況下解析對象列表,但我認爲它不會改變任何東西。