How to parse / read JSON data into a Android ListView

Today we get on with our series that will connect our Android applications to internet webservices!

Next up in line: from JSON to a Listview. A lot of this project is identical to the previous post in this series so try to look there first if you have any problems. On the bottom of the post ill add the Eclipse project with the source.

For this example i made use of an already existing JSON webservice located here.

This is a piece of the JSON array that gets returned:

01 {"earthquakes": [
02     {
03         "eqid": "c0001xgp",
04         "magnitude": 8.8,
05         "lng": 142.369,
06         "src": "us",
07         "datetime": "2011-03-11 04:46:23",
08         "depth": 24.4,
09         "lat": 38.322
10   },
11   {
12         "eqid": "2007hear",
13         "magnitude": 8.4,
14         "lng": 101.3815,
15         "src": "us",
16         "datetime": "2007-09-12 09:10:26",
17         "depth": 30,
18         "lat": -4.5172
19   }
20 <--more -->
21  
22 ]}

So how do we get this data into our application! Behold our getJSON class!

getJSON(String url)

01 public static JSONObject getJSONfromURL(String url){
02  
03     //initialize
04     InputStream is = null;
05     String result = "";
06     JSONObject jArray = null;
07  
08     //http post
09     try{
10         HttpClient httpclient = new DefaultHttpClient();
11         HttpPost httppost = new HttpPost(url);
12         HttpResponse response = httpclient.execute(httppost);
13         HttpEntity entity = response.getEntity();
14         is = entity.getContent();
15  
16     }catch(Exception e){
17         Log.e("log_tag""Error in http connection "+e.toString());
18     }
19  
20     //convert response to string
21     try{
22         BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
23         StringBuilder sb = new StringBuilder();
24         String line = null;
25         while ((line = reader.readLine()) != null) {
26             sb.append(line + "\n");
27         }
28         is.close();
29         result=sb.toString();
30     }catch(Exception e){
31         Log.e("log_tag""Error converting result "+e.toString());
32     }
33  
34     //try parse the string to a JSON object
35     try{
36             jArray = new JSONObject(result);
37     }catch(JSONException e){
38         Log.e("log_tag""Error parsing data "+e.toString());
39     }
40  
41     return jArray;
42 }

The code above can be divided in 3 parts.

  1. the first part makes the HTTP call
  2. the second part converts the stream into a String
  3. the third part converts the string to a JSONObject

Now we only have to implement this into out ListView. We can use the same method as in the XML tutorial. We make a HashMap that stores our data and we put JSON values in the HashMap. After that we will bind that HashMap to a SimpleAdapter. Here is how its done:

Implementation

01 ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
02  
03 //Get the data (see above)
04 JSONObject json =
06  
07     try{
08     //Get the element that holds the earthquakes ( JSONArray )
09     JSONArray  earthquakes = json.getJSONArray("earthquakes");
10  
11             //Loop the Array
12         for(int i=0;i < earthquakes.length();i++){                      
13  
14             HashMap<String, String> map = new HashMap<String, String>();
15             JSONObject e = earthquakes.getJSONObject(i);
16  
17             map.put("id",  String.valueOf(i));
18             map.put("name""Earthquake name:" + e.getString("eqid"));
19             map.put("magnitude""Magnitude: " +  e.getString("magnitude"));
20             mylist.add(map);
21     }
22     }catch(JSONException e)        {
23          Log.e("log_tag""Error parsing data "+e.toString());
24     }

After this we only need to make up the Simple Adapter

01 ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main,
02                         new String[] { "name""magnitude" },
03                         new int[] { R.id.item_title, R.id.item_subtitle });
04  
05         setListAdapter(adapter);
06  
07         final ListView lv = getListView();
08         lv.setTextFilterEnabled(true);
09         lv.setOnItemClickListener(new OnItemClickListener() {
10             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
11                 @SuppressWarnings("unchecked")
12                 HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
13                 Toast.makeText(Main.this"ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show();
14  
15             }
16         });

Source

Here is the Eclipse project: source code

Have fun playing around with it.

本文来自: http://p-xr.com/android-tutorial-how-to-parse-read-json-data-into-a-android-listview/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值