、利用HttpUrlConnection
 1 /**  2      * 从指定的URL中获取数组  3      * @param urlPath  4      * @return  5      * @throws Exception  6      */  7     public static String readParse(String urlPath) throws Exception {    8                ByteArrayOutputStream outStream = new ByteArrayOutputStream();    9                byte[] data = new byte[1024];   10                 int len = 0;   11                 URL url = new URL(urlPath);   12                 HttpURLConnection conn = (HttpURLConnection) url.openConnection();   13                 InputStream inStream = conn.getInputStream();   14                 while ((len = inStream.read(data)) != -1) {   15                     outStream.write(data, 0, len);   16                 }   17                 inStream.close();   18                 return new String(outStream.toByteArray());//通过out.Stream.toByteArray获取到写的数据   19             }  

2、利用HttpClient

 1 /**  2      * 访问数据库并返回JSON数据字符串  3      *   4      * @param params 向服务器端传的参数  5      * @param url  6      * @return  7      * @throws Exception  8      */  9     public static String doPost(List<NameValuePair> params, String url) 10             throws Exception { 11         String result = null; 12         // 获取HttpClient对象 13         HttpClient httpClient = new DefaultHttpClient(); 14         // 新建HttpPost对象 15         HttpPost httpPost = new HttpPost(url); 16         if (params != null) { 17             // 设置字符集 18             HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); 19             // 设置参数实体 20             httpPost.setEntity(entity); 21         } 22  23         /*// 连接超时 24         httpClient.getParams().setParameter( 25                 CoreConnectionPNames.CONNECTION_TIMEOUT, 3000); 26         // 请求超时 27         httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 28                 3000);*/ 29         // 获取HttpResponse实例 30         HttpResponse httpResp = httpClient.execute(httpPost); 31         // 判断是够请求成功 32         if (httpResp.getStatusLine().getStatusCode() == 200) { 33             // 获取返回的数据 34             result = EntityUtils.toString(httpResp.getEntity(), "UTF-8"); 35         } else { 36             Log.i("HttpPost", "HttpPost方式请求失败"); 37         } 38  39         return result; 40     }

其次Json数据解析:
json数据: [{"id":"67","biaoTi":"G","logo":"http://www.nuoter.com/wtserver/resources/upload/13508741845270.png","logoLunbo":"http://www.nuoter.com/wtserver/resources/upload/13509015004480.jpg","yuanJia":"0","xianJia":"0"},{"id":"64","biaoTi":"444","logo":"http://www.nuoter.com/wtserver/resources/upload/13508741704400.png","logoLunbo":"http://172.16.1.75:8080/wtserver/resources/upload/13508741738500.png","yuanJia":"0","xianJia":"0"},{"id":"62","biaoTi":"jhadasd","logo":"http://www.nuoter.com/wtserver/resources/upload/13508741500450.png","logoLunbo":"http://172.16.1.75:8080/wtserver/resources/upload/13508741557450.png","yuanJia":"1","xianJia":"0"}]

 

 1 /**  2      * 解析  3      *   4      * @throws JSONException  5      */  6     private static ArrayList<HashMap<String, Object>> Analysis(String jsonStr)  7             throws JSONException {  8         /******************* 解析 ***********************/  9         JSONArray jsonArray = null; 10         // 初始化list数组对象 11         ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); 12         jsonArray = new JSONArray(jsonStr); 13         for (int i = 0; i < jsonArray.length(); i++) { 14             JSONObject jsonObject = jsonArray.getJSONObject(i); 15             // 初始化map数组对象 16             HashMap<String, Object> map = new HashMap<String, Object>(); 17             map.put("logo", jsonObject.getString("logo")); 18             map.put("logoLunbo", jsonObject.getString("logoLunbo")); 19             map.put("biaoTi", jsonObject.getString("biaoTi")); 20             map.put("yuanJia", jsonObject.getString("yuanJia")); 21             map.put("xianJia", jsonObject.getString("xianJia")); 22             map.put("id", jsonObject.getInt("id")); 23             list.add(map); 24         } 25         return list; 26     }

 

 最后数据适配:

1、TextView

 1 /**  2  * readParse(String)从服务器端获取数据  3  * Analysis(String)解析json数据  4  */  5     private void resultJson() {  6         try {  7             allData = Analysis(readParse(url));  8             Iterator<HashMap<String, Object>> it = allData.iterator();  9             while (it.hasNext()) { 10                 Map<String, Object> ma = it.next(); 11                 if ((Integer) ma.get("id") == id) { 12                     biaoTi.setText((String) ma.get("biaoTi")); 13                     yuanJia.setText((String) ma.get("yuanJia")); 14                     xianJia.setText((String) ma.get("xianJia")); 15                 } 16             } 17         } catch (JSONException e) { 18             e.printStackTrace(); 19         } catch (Exception e) { 20             e.printStackTrace(); 21         } 22     }

2、ListView:

 1 /**  2      * ListView 数据适配  3      */  4     private void product_data(){   5         List<HashMap<String, Object>> lists = null;  6         try {  7             lists = Analysis(readParse(url));//解析出json数据  8         } catch (Exception e) {  9             // TODO Auto-generated catch block 10             e.printStackTrace(); 11         } 12         List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>(); 13         for(HashMap<String, Object> news : lists){ 14             HashMap<String, Object> item = new HashMap<String, Object>(); 15             item.put("chuXingTianShu", news.get("chuXingTianShu")); 16             item.put("biaoTi", news.get("biaoTi")); 17             item.put("yuanJia", news.get("yuanJia")); 18             item.put("xianJia", news.get("xianJia")); 19             item.put("id", news.get("id")); 20              21             try { 22                 bitmap = ImageService.getImage(news.get("logo").toString());//图片从服务器上获取 23             } catch (Exception e) { 24                 // TODO Auto-generated catch block 25                 e.printStackTrace(); 26             } 27             if(bitmap==null){ 28                 Log.i("bitmap", ""+bitmap); 29                 Toast.makeText(TravelLine.this, "图片加载错误", Toast.LENGTH_SHORT) 30                 .show();                                         // 显示图片编号 31             } 32             item.put("logo",bitmap); 33             data.add(item); 34         } 35              listItemAdapter = new MySimpleAdapter1(TravelLine.this,data,R.layout.a_travelline_item, 36                         // 动态数组与ImageItem对应的子项 37                         new String[] { "logo", "biaoTi", 38                                 "xianJia", "yuanJia", "chuXingTianShu"}, 39                         // ImageItem的XML文件里面的一个ImageView,两个TextView ID 40                         new int[] { R.id.trl_ItemImage, R.id.trl_ItemTitle, 41                                 R.id.trl_ItemContent, R.id.trl_ItemMoney, 42                                 R.id.trl_Itemtoday}); 43                 listview.setAdapter(listItemAdapter); 44                 //添加点击    45                 listview.setOnItemClickListener(new OnItemClickListener() {     46                     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,    47                             long arg3) {    48                         login_publicchannel_trl_sub(arg2); 49                     }    50                 }); 51     }

对于有图片的要重写适配器

 1 package com.nuoter.adapterUntil;  2   3   4 import java.util.HashMap;  5 import java.util.List;  6   7   8 import android.content.Context;  9 import android.graphics.Bitmap; 10 import android.graphics.BitmapFactory; 11 import android.graphics.Paint; 12 import android.net.Uri; 13 import android.view.LayoutInflater; 14 import android.view.View; 15 import android.view.ViewGroup; 16 import android.widget.BaseAdapter; 17 import android.widget.ImageView; 18 import android.widget.LinearLayout; 19 import android.widget.TextView; 20  21  22 public class MySimpleAdapter1 extends BaseAdapter {   23     private LayoutInflater mInflater;   24     private List<HashMap<String, Object>> list;   25     private int layoutID;   26     private String flag[];   27     private int ItemIDs[];   28     public MySimpleAdapter1(Context context, List<HashMap<String, Object>> list,   29             int layoutID, String flag[], int ItemIDs[]) {   30         this.mInflater = LayoutInflater.from(context);   31         this.list = list;   32         this.layoutID = layoutID;   33         this.flag = flag;   34         this.ItemIDs = ItemIDs;   35     }   36     @Override   37     public int getCount() {   38         // TODO Auto-generated method stub   39         return list.size();   40     }   41     @Override   42     public Object getItem(int arg0) {   43         // TODO Auto-generated method stub   44         return 0;   45     }   46     @Override   47     public long getItemId(int arg0) {   48         // TODO Auto-generated method stub   49         return 0;   50     }   51     @Override   52     public View getView(int position, View convertView, ViewGroup parent) {   53         convertView = mInflater.inflate(layoutID, null);   54        // convertView = mInflater.inflate(layoutID, null);   55         for (int i = 0; i < flag.length; i++) {//备注1   56             if (convertView.findViewById(ItemIDs[i]) instanceof ImageView) {   57                 ImageView imgView = (ImageView) convertView.findViewById(ItemIDs[i]);   58                 imgView.setImageBitmap((Bitmap) list.get(position).get(flag[i]));///////////关键是这句!!!!!!!!!!!!!!! 59   60             }else if (convertView.findViewById(ItemIDs[i]) instanceof TextView) {   61                 TextView tv = (TextView) convertView.findViewById(ItemIDs[i]);   62                 tv.setText((String) list.get(position).get(flag[i]));   63             }else{ 64                 //...备注2  65             }   66         }   67         //addListener(convertView);  68         return convertView;   69     }   70  71 /*    public void addListener(final View convertView) { 72          73         ImageView imgView = (ImageView)convertView.findViewById(R.id.lxs_item_image); 74          75          76   77     } */ 78  79 }  

对于图片的获取,json解析出来的是字符串url:"logoLunbo":http://www.nuoter.com/wtserver/resources/upload/13509015004480.jpg 从url获取 图片

ImageService工具类

 1 package com.nuoter.adapterUntil;  2   3 import java.io.ByteArrayOutputStream;  4 import java.io.InputStream;  5 import java.net.HttpURLConnection;  6 import java.net.URL;  7   8 import android.graphics.Bitmap;  9 import android.graphics.BitmapFactory; 10  11  12 public class ImageService { 13      14     /** 15      * 获取网络图片的数据 16      * @param path 网络图片路径 17      * @return 18      */ 19     public static Bitmap getImage(String path) throws Exception{ 20          21         /*URL url = new URL(imageUrl);    22         HttpURLConnection conn = (HttpURLConnection) url.openConnection();    23         InputStream is = conn.getInputStream();    24         mBitmap = BitmapFactory.decodeStream(is);*/ 25         Bitmap bitmap= null; 26         URL url = new URL(path); 27         HttpURLConnection conn = (HttpURLConnection) url.openConnection();//基于HTTP协议连接对象 28         conn.setConnectTimeout(5000); 29         conn.setRequestMethod("GET"); 30         if(conn.getResponseCode() == 200){ 31             InputStream inStream = conn.getInputStream(); 32             bitmap = BitmapFactory.decodeStream(inStream); 33         } 34         return bitmap; 35     } 36      37     /** 38      * 读取流中的数据 从url获取json数据 39      * @param inStream 40      * @return 41      * @throws Exception 42      */ 43     public static byte[] read(InputStream inStream) throws Exception{ 44         ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 45         byte[] buffer = new byte[1024]; 46         int len = 0; 47         while( (len = inStream.read(buffer)) != -1){ 48             outStream.write(buffer, 0, len); 49         } 50         inStream.close(); 51         return outStream.toByteArray(); 52     } 53  54  55 }

上面也将从url处获取网络数据写在了工具类ImageService中方面调用,因为都是一样的。

当然也可以在Activity类中写一个获取服务器图片的函数(当用处不多时)

 1  /*  2   3      * 从服务器取图片  4      * 参数:String类型  5      * 返回:Bitmap类型  6   7      */  8   9     public static Bitmap getHttpBitmap(String urlpath) { 10         Bitmap bitmap = null; 11         try { 12             //生成一个URL对象 13             URL url = new URL(urlpath); 14             //打开连接 15             HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 16 //            conn.setConnectTimeout(6*1000); 17 //            conn.setDoInput(true); 18             conn.connect(); 19             //得到数据流 20             InputStream inputstream = conn.getInputStream(); 21             bitmap = BitmapFactory.decodeStream(inputstream); 22             //关闭输入流 23             inputstream.close(); 24             //关闭连接 25             conn.disconnect(); 26         } catch (Exception e) { 27             Log.i("MyTag", "error:"+e.toString()); 28         } 29         return bitmap; 30     }

调用:

 1 public ImageView pic;  2 .....  3 .....  4 allData=Analysis(readParse(url));  5 Iterator<HashMap<String, Object>> it=allData.iterator();  6 while(it.hasNext()){  7 Map<String, Object> ma=it.next();  8 if((Integer)ma.get("id")==id)  9 { 10 logo=(String) ma.get("logo"); 11 bigpic=getHttpBitmap(logo); 12 } 13 } 14 pic.setImageBitmap(bigpic);

另附 下载数据很慢时建立子线程并传参:

 1 new Thread() {  2             @Override  3             public void run() {  4                 // 参数列表  5                 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  6                 nameValuePairs.add(new BasicNameValuePair("currPage", Integer  7                         .toString(1)));  8                 nameValuePairs.add(new BasicNameValuePair("pageSize", Integer  9                         .toString(5))); 10                 try { 11                     String result = doPost(nameValuePairs, POST_URL);                     12                     Message msg = handler.obtainMessage(1, 1, 1, result); 13                     handler.sendMessage(msg);                     // 发送消息 14                 } catch (Exception e) { 15                     // TODO Auto-generated catch block 16                     e.printStackTrace(); 17                 } 18             } 19         }.start(); 20  21         // 定义Handler对象 22         handler = new Handler() { 23             public void handleMessage(Message msg) { 24                 switch (msg.what) { 25                 case 1:{ 26                     // 处理UI 27                     StringBuffer strbuf = new StringBuffer(); 28                     List<HashMap<String, Object>> lists = null; 29                     try { 30                         lists = MainActivity.this 31                                 .parseJson(msg.obj.toString()); 32                     } catch (Exception e) { 33                         // TODO Auto-generated catch block 34                         e.printStackTrace(); 35                     } 36                     List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>(); 37                     for(HashMap<String, Object> news : lists){ 38                         HashMap<String, Object> item = new HashMap<String, Object>(); 39                         item.put("id", news.get("id")); 40                         item.put("ItemText0", news.get("name")); 41                          42                         try { 43                             bitmap = ImageService.getImage(news.get("logo").toString()); 44                         } catch (Exception e) { 45                             // TODO Auto-generated catch block 46                             e.printStackTrace(); 47                         } 48                         if(bitmap==null){ 49                             Log.i("bitmap", ""+bitmap); 50                             Toast.makeText(MainActivity.this, "图片加载错误", Toast.LENGTH_SHORT) 51                             .show();                                         // 显示图片编号 52                         } 53                         item.put("ItemImage",bitmap); 54                         data.add(item); 55                     } 56                      57                     //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应 58                     MySimpleAdapter saImageItems = new MySimpleAdapter(MainActivity.this, data,  59                             R.layout.d_travelagence_item,  60                             new String[] {"ItemImage", "ItemText0", "ItemText1"},  61                             new int[] {R.id.lxs_item_image, R.id.lxs_item_text0, R.id.lxs_item_text1}); 62                     //添加并且显示 63                     gridview.setAdapter(saImageItems); 64                 } 65                     break; 66                 default: 67                     break; 68                 } 69                  70                  71             } 72         };
posted on 2013-04-22 19:10 姚先进 阅读(279) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: