数据准备
本案例中的服务端数据以Json的形式传递,在服务端使用.Net开发一个一般处理程序,序列化一个产品对象,里面包含名称、价格、图片名称,最后序列化成JSON格式的数据返回给客户端。
数据如下
1 [{"imageName":"image1.png","name":"苹果","price":12},2 {"imageName":"image2.png","name":"闹钟","price":56},3 {"imageName":"image3.png","name":"蛋糕","price":24},4 {"imageName":"image4.png","name":"零钱包","price":8},5 {"imageName":"image5.png","name":"书本","price":42},6 {"imageName":"image6.png","name":"糖果","price":16},7 {"imageName":"image7.png","name":"西瓜","price":2}]
本案例的URL地址均使用一个CommonUri类进行管理:
1 package com.example.handlerimageortext;2 3 public class CommonUri {4 // 访问服务器数据的链接5 public static final String PRODUCT_URL = "http://192.168.1.102:1231/json/returnCommondityJson.ashx";6 // 图片的连接7 public static final String PRODUCT_IMG="http://192.168.1.102:1231/json/img/";8 }
使用AsyncTask获取Json数据
在UI线程中,使用AsyncTask的方式访问网络获取JSON数据,并对其进行解析
1 public class MyTask extends AsyncTask<String, Void, List<Map<String,Object>>>{ 2 @Override 3 protected void onPreExecute() { 4 super.onPreExecute(); 5 // 显示对话框 6 dialog.show(); 7 } 8 9 @Override10 protected List<Map<String, Object>> doInBackground(String... params) {11 List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();12 try {13 // 获取网络JSON格式数据14 HttpClient httpClient=new DefaultHttpClient();15 HttpPost httpPost=new HttpPost(params[0]);16 HttpResponse httpResponse=httpClient.execute(httpPost);17 if(httpResponse.getStatusLine().getStatusCode()==200){18 String jsonString=EntityUtils.toString(httpResponse.getEntity(),"utf-8");19 // 解析Json格式数据,并使用一个List<Map>存放20 JSONArray jsonArray=new JSONArray(jsonString);21 for(int i=0;i<jsonArray.length();i++){22 JSONObject jsonObject=jsonArray.getJSONObject(i);23 Map<String,Object> map=new HashMap<String, Object>();24 map.put("name",jsonObject.get("name"));25 map.put("price",jsonObject.get("price"));26 map.put("imageName",jsonObject.get("imageName"));27 list.add(map);28 }29 }30 } catch (Exception e) {31 e.printStackTrace();32 }33 return list;34 }35 @Override36 protected void onPostExecute(List<Map<String, Object>> result) {37 super.onPostExecute(result);38 // 把查询到的数据传递给适配器39 adapter.setData(result);40 // 为ListView设定适配器41 listview.setAdapter(adapter);42 adapter.notifyDataSetChanged();43 // 隐藏对话框44 dialog.dismiss();45 } 46 }
新闻热点
疑难解答