亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android客戶端從服務器端獲取json數據并解析的實現代碼

2020-04-11 12:15:04
字體:
來源:轉載
供稿:網友

首先客戶端從服務器端獲取json數據

1、利用HttpUrlConnection

復制代碼 代碼如下:

/**
      * 從指定的URL中獲取數組
      * @param urlPath
      * @return
      * @throws Exception
      */
     public static String readParse(String urlPath) throws Exception { 
                ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
                byte[] data = new byte[1024]; 
                 int len = 0; 
                 URL url = new URL(urlPath); 
                 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
                 InputStream inStream = conn.getInputStream(); 
                 while ((len = inStream.read(data)) != -1) { 
                     outStream.write(data, 0, len); 
                 } 
                 inStream.close(); 
                 return new String(outStream.toByteArray());//通過out.Stream.toByteArray獲取到寫的數據 
             }

2、利用HttpClient

復制代碼 代碼如下:

/**
      * 訪問數據庫并返回JSON數據字符串
      *
      * @param params 向服務器端傳的參數
      * @param url
      * @return
      * @throws Exception
      */
     public static String doPost(List<NameValuePair> params, String url)
             throws Exception {
         String result = null;
         // 獲取HttpClient對象
         HttpClient httpClient = new DefaultHttpClient();
         // 新建HttpPost對象
         HttpPost httpPost = new HttpPost(url);
         if (params != null) {
             // 設置字符集
             HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
             // 設置參數實體
             httpPost.setEntity(entity);
         }

         /*// 連接超時
         httpClient.getParams().setParameter(
                 CoreConnectionPNames.CONNECTION_TIMEOUT, 3000);
         // 請求超時
         httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
                 3000);*/
         // 獲取HttpResponse實例
         HttpResponse httpResp = httpClient.execute(httpPost);
         // 判斷是夠請求成功
         if (httpResp.getStatusLine().getStatusCode() == 200) {
             // 獲取返回的數據
             result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
         } else {
             Log.i("HttpPost", "HttpPost方式請求失敗");
         }

         return result;
     }

其次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"}]

復制代碼 代碼如下:

/**
      * 解析
      *
      * @throws JSONException
      */
     private static ArrayList<HashMap<String, Object>> Analysis(String jsonStr)
             throws JSONException {
         /******************* 解析 ***********************/
         JSONArray jsonArray = null;
         // 初始化list數組對象
         ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
         jsonArray = new JSONArray(jsonStr);
         for (int i = 0; i < jsonArray.length(); i++) {
             JSONObject jsonObject = jsonArray.getJSONObject(i);
             // 初始化map數組對象
             HashMap<String, Object> map = new HashMap<String, Object>();
             map.put("logo", jsonObject.getString("logo"));
             map.put("logoLunbo", jsonObject.getString("logoLunbo"));
             map.put("biaoTi", jsonObject.getString("biaoTi"));
             map.put("yuanJia", jsonObject.getString("yuanJia"));
             map.put("xianJia", jsonObject.getString("xianJia"));
             map.put("id", jsonObject.getInt("id"));
             list.add(map);
         }
         return list;
     }

最后數據適配:

1、TextView

復制代碼 代碼如下:

/**
  * readParse(String)從服務器端獲取數據
  * Analysis(String)解析json數據
  */
     private void resultJson() {
         try {
             allData = Analysis(readParse(url));
             Iterator<HashMap<String, Object>> it = allData.iterator();
             while (it.hasNext()) {
                 Map<String, Object> ma = it.next();
                 if ((Integer) ma.get("id") == id) {
                     biaoTi.setText((String) ma.get("biaoTi"));
                     yuanJia.setText((String) ma.get("yuanJia"));
                     xianJia.setText((String) ma.get("xianJia"));
                 }
             }
         } catch (JSONException e) {
             e.printStackTrace();
         } catch (Exception e) {
             e.printStackTrace();
         }
     }

2、ListView:

復制代碼 代碼如下:

/**
      * ListView 數據適配
      */
     private void product_data(){
         List<HashMap<String, Object>> lists = null;
         try {
             lists = Analysis(readParse(url));//解析出json數據
         } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
         for(HashMap<String, Object> news : lists){
             HashMap<String, Object> item = new HashMap<String, Object>();
             item.put("chuXingTianShu", news.get("chuXingTianShu"));
             item.put("biaoTi", news.get("biaoTi"));
             item.put("yuanJia", news.get("yuanJia"));
             item.put("xianJia", news.get("xianJia"));
             item.put("id", news.get("id"));

             try {
                 bitmap = ImageService.getImage(news.get("logo").toString());//圖片從服務器上獲取
             } catch (Exception e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
             if(bitmap==null){
                 Log.i("bitmap", ""+bitmap);
                 Toast.makeText(TravelLine.this, "圖片加載錯誤", Toast.LENGTH_SHORT)
                 .show();                                         // 顯示圖片編號
             }
             item.put("logo",bitmap);
             data.add(item);
         }
              listItemAdapter = new MySimpleAdapter1(TravelLine.this,data,R.layout.a_travelline_item,
                         // 動態數組與ImageItem對應的子項
                         new String[] { "logo", "biaoTi",
                                 "xianJia", "yuanJia", "chuXingTianShu"},
                         // ImageItem的XML文件里面的一個ImageView,兩個TextView ID
                         new int[] { R.id.trl_ItemImage, R.id.trl_ItemTitle,
                                 R.id.trl_ItemContent, R.id.trl_ItemMoney,
                                 R.id.trl_Itemtoday});
                 listview.setAdapter(listItemAdapter);
                 //添加點擊  
                 listview.setOnItemClickListener(new OnItemClickListener() {   
                     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
                             long arg3) {  
                         login_publicchannel_trl_sub(arg2);
                     }  
                 });
     }

對于有圖片的要重寫適配器

復制代碼 代碼如下:

package com.nuoter.adapterUntil;

 
 import java.util.HashMap;
 import java.util.List;

 
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Paint;
 import android.net.Uri;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;

 
 public class MySimpleAdapter1 extends BaseAdapter { 
     private LayoutInflater mInflater; 
     private List<HashMap<String, Object>> list; 
     private int layoutID; 
     private String flag[]; 
     private int ItemIDs[]; 
     public MySimpleAdapter1(Context context, List<HashMap<String, Object>> list, 
             int layoutID, String flag[], int ItemIDs[]) { 
         this.mInflater = LayoutInflater.from(context); 
         this.list = list; 
         this.layoutID = layoutID; 
         this.flag = flag; 
         this.ItemIDs = ItemIDs; 
     } 
     @Override 
     public int getCount() { 
         // TODO Auto-generated method stub 
         return list.size(); 
     } 
     @Override 
     public Object getItem(int arg0) { 
         // TODO Auto-generated method stub 
         return 0; 
     } 
     @Override 
     public long getItemId(int arg0) { 
         // TODO Auto-generated method stub 
         return 0; 
     } 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
         convertView = mInflater.inflate(layoutID, null); 
        // convertView = mInflater.inflate(layoutID, null); 
         for (int i = 0; i < flag.length; i++) {//備注1 
             if (convertView.findViewById(ItemIDs[i]) instanceof ImageView) { 
                 ImageView imgView = (ImageView) convertView.findViewById(ItemIDs[i]); 
                 imgView.setImageBitmap((Bitmap) list.get(position).get(flag[i]));///////////關鍵是這句!!!!!!!!!!!!!!!

             }else if (convertView.findViewById(ItemIDs[i]) instanceof TextView) { 
                 TextView tv = (TextView) convertView.findViewById(ItemIDs[i]); 
                 tv.setText((String) list.get(position).get(flag[i])); 
             }else{
                 //...備注2
             } 
         } 
         //addListener(convertView);
         return convertView; 
     } 

 /*    public void addListener(final View convertView) {

         ImageView imgView = (ImageView)convertView.findViewById(R.id.lxs_item_image);

        

     } */

 }

對于圖片的獲取,json解析出來的是字符串url:"logoLunbo":http://www.nuoter.com/wtserver/resources/upload/13509015004480.jpg 從url獲取 圖片

ImageService工具類

復制代碼 代碼如下:

package com.nuoter.adapterUntil;

 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;

 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;

 
 public class ImageService {

     /**
      * 獲取網絡圖片的數據
      * @param path 網絡圖片路徑
      * @return
      */
     public static Bitmap getImage(String path) throws Exception{

         /*URL url = new URL(imageUrl);  
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
         InputStream is = conn.getInputStream();  
         mBitmap = BitmapFactory.decodeStream(is);*/
         Bitmap bitmap= null;
         URL url = new URL(path);
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();//基于HTTP協議連接對象
         conn.setConnectTimeout(5000);
         conn.setRequestMethod("GET");
         if(conn.getResponseCode() == 200){
             InputStream inStream = conn.getInputStream();
             bitmap = BitmapFactory.decodeStream(inStream);
         }
         return bitmap;
     }

     /**
      * 讀取流中的數據 從url獲取json數據
      * @param inStream
      * @return
      * @throws Exception
      */
     public static byte[] read(InputStream inStream) throws Exception{
         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
         byte[] buffer = new byte[1024];
         int len = 0;
         while( (len = inStream.read(buffer)) != -1){
             outStream.write(buffer, 0, len);
         }
         inStream.close();
         return outStream.toByteArray();
     }
  }

上面也將從url處獲取網絡數據寫在了工具類ImageService中方面調用,因為都是一樣的。

當然也可以在Activity類中寫一個獲取服務器圖片的函數(當用處不多時)

復制代碼 代碼如下:

/*

      * 從服務器取圖片
      * 參數:String類型
      * 返回:Bitmap類型

      */

     public static Bitmap getHttpBitmap(String urlpath) {
         Bitmap bitmap = null;
         try {
             //生成一個URL對象
             URL url = new URL(urlpath);
             //打開連接
             HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 //            conn.setConnectTimeout(6*1000);
 //            conn.setDoInput(true);
             conn.connect();
             //得到數據流
             InputStream inputstream = conn.getInputStream();
             bitmap = BitmapFactory.decodeStream(inputstream);
             //關閉輸入流
             inputstream.close();
             //關閉連接
             conn.disconnect();
         } catch (Exception e) {
             Log.i("MyTag", "error:"+e.toString());
         }
         return bitmap;
     }

調用:

復制代碼 代碼如下:

public ImageView pic;
 .....
 .....
 allData=Analysis(readParse(url));
 Iterator<HashMap<String, Object>> it=allData.iterator();
 while(it.hasNext()){
 Map<String, Object> ma=it.next();
 if((Integer)ma.get("id")==id)
 {
 logo=(String) ma.get("logo");
 bigpic=getHttpBitmap(logo);
 }
 }
 pic.setImageBitmap(bigpic);

另附 下載數據很慢時建立子線程并傳參:

復制代碼 代碼如下:

new Thread() {
             @Override
             public void run() {
                 // 參數列表
                 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                 nameValuePairs.add(new BasicNameValuePair("currPage", Integer
                         .toString(1)));
                 nameValuePairs.add(new BasicNameValuePair("pageSize", Integer
                         .toString(5)));
                 try {
                     String result = doPost(nameValuePairs, POST_URL);                   
                     Message msg = handler.obtainMessage(1, 1, 1, result);
                     handler.sendMessage(msg);                     // 發送消息
                 } catch (Exception e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 }
             }
         }.start();

         // 定義Handler對象
         handler = new Handler() {
             public void handleMessage(Message msg) {
                 switch (msg.what) {
                 case 1:{
                     // 處理UI
                     StringBuffer strbuf = new StringBuffer();
                     List<HashMap<String, Object>> lists = null;
                     try {
                         lists = MainActivity.this
                                 .parseJson(msg.obj.toString());
                     } catch (Exception e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                     }
                     List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
                     for(HashMap<String, Object> news : lists){
                         HashMap<String, Object> item = new HashMap<String, Object>();
                         item.put("id", news.get("id"));
                         item.put("ItemText0", news.get("name"));

                         try {
                             bitmap = ImageService.getImage(news.get("logo").toString());
                         } catch (Exception e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                         }
                         if(bitmap==null){
                             Log.i("bitmap", ""+bitmap);
                             Toast.makeText(MainActivity.this, "圖片加載錯誤", Toast.LENGTH_SHORT)
                             .show();                                         // 顯示圖片編號
                         }
                         item.put("ItemImage",bitmap);
                         data.add(item);
                     }

                     //生成適配器的ImageItem <====> 動態數組的元素,兩者一一對應
                     MySimpleAdapter saImageItems = new MySimpleAdapter(MainActivity.this, data,
                             R.layout.d_travelagence_item,
                             new String[] {"ItemImage", "ItemText0", "ItemText1"},
                             new int[] {R.id.lxs_item_image, R.id.lxs_item_text0, R.id.lxs_item_text1});
                     //添加并且顯示
                     gridview.setAdapter(saImageItems);
                 }
                     break;
                 default:
                     break;
                 }                

             }
         };

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产综合在线看| 91高潮在线观看| 精品国产乱码久久久久久天美| 精品久久久久久久久久久久| 亚洲国产精品一区二区三区| 欧美一级片在线播放| 欧美激情videos| 日本一区二区在线播放| 日韩在线中文字| 久久久国产精品免费| 日韩毛片在线观看| 亚洲一区亚洲二区| 中文字幕国内精品| 久久在线观看视频| 成人免费淫片aa视频免费| 日韩欧美中文字幕在线观看| 91在线视频免费| 91亚洲精华国产精华| 久久久久久69| 一本色道久久88综合亚洲精品ⅰ| 亚洲人成在线免费观看| 自拍偷拍亚洲欧美| 国产精品电影在线观看| 国产精品va在线播放我和闺蜜| 亚洲一区亚洲二区亚洲三区| 免费不卡欧美自拍视频| 成年无码av片在线| 欧美成人sm免费视频| 91精品国产自产在线观看永久| 亚洲黄色有码视频| 国产亚洲综合久久| 久99久在线视频| 国产精品激情自拍| 日韩在线视频免费观看| 国产成人激情小视频| 久久久人成影片一区二区三区观看| 国产精品午夜国产小视频| 亚洲一品av免费观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲天堂久久av| 在线激情影院一区| 国产精品www色诱视频| 欧美激情女人20p| 91视频88av| 色樱桃影院亚洲精品影院| 亚洲成人网在线观看| 91av在线免费观看视频| 久久久国产一区二区| 国产专区精品视频| 国产在线拍偷自揄拍精品| 欧美激情按摩在线| 98视频在线噜噜噜国产| 亚洲一区二区三区四区在线播放| 97涩涩爰在线观看亚洲| 欧美日韩国产一中文字不卡| 成人在线视频福利| 最近中文字幕mv在线一区二区三区四区| 中文字幕精品国产| 久久久久久噜噜噜久久久精品| 九九热这里只有精品免费看| 久久久久女教师免费一区| 精品无人国产偷自产在线| 黑人巨大精品欧美一区二区免费| 国产精品久久二区| 亚洲黄色片网站| 欧美一区二区三区图| 在线视频欧美日韩精品| 久久精品视频va| 91久久国产精品91久久性色| 久久精品国产99国产精品澳门| 亚洲影视九九影院在线观看| 97色在线视频| 国产成人极品视频| 欧美在线免费视频| 国产精品久久av| 日韩av第一页| 一区二区三区 在线观看视| 97精品一区二区视频在线观看| 久久香蕉国产线看观看网| 中文字幕亚洲色图| 欧美午夜xxx| 欧美日韩精品在线观看| 欧美一级淫片videoshd| 欧美做受高潮电影o| 欧美性极品xxxx娇小| 97国产精品人人爽人人做| 亚洲国产精品免费| 久久精品这里热有精品| 97久久精品人搡人人玩| 日韩一级裸体免费视频| 欧美大全免费观看电视剧大泉洋| 国产成人综合精品| 97精品视频在线观看| 夜夜嗨av色综合久久久综合网| 美女久久久久久久久久久| 久久久国产精品x99av| 在线观看日韩av| 久久91亚洲精品中文字幕奶水| 亚洲影院色无极综合| 色偷偷偷亚洲综合网另类| 国模私拍一区二区三区| 成人精品一区二区三区电影免费| 亚洲精品午夜精品| 91丨九色丨国产在线| 亚洲午夜久久久久久久| 国产精品久久久久久亚洲影视| 亚洲性夜色噜噜噜7777| 久久手机精品视频| 亚洲欧美一区二区精品久久久| 久久久免费av| 成人免费在线视频网站| 欧美黄网免费在线观看| 一区二区欧美在线| 成人欧美一区二区三区在线| 色综合五月天导航| 欧美成人三级视频网站| 91精品国产免费久久久久久| 亚洲国产美女精品久久久久∴| 国产精品夫妻激情| 国产精品女主播视频| 91九色视频在线| 日韩在线资源网| 亚洲天天在线日亚洲洲精| 欧美精品一区在线播放| 日韩成人av网| 一区二区三区无码高清视频| 成人激情视频网| 久久精品99国产精品酒店日本| 国产网站欧美日韩免费精品在线观看| 久久国产精品电影| 精品视频久久久久久| 亚洲第五色综合网| 亚洲欧美日韩国产成人| 日韩精品小视频| www国产亚洲精品久久网站| 日韩av影院在线观看| 最近2019中文字幕mv免费看| 亚洲国产精品va| 一区二区成人精品| 色综合视频一区中文字幕| 91av视频导航| 国产日韩精品在线观看| 欧美高清在线观看| 国产精品国产亚洲伊人久久| 日本高清不卡在线| 国产精品第一页在线| 亚洲在线一区二区| 亚洲免费高清视频| 亚洲国产天堂久久综合| 中文字幕亚洲欧美日韩在线不卡| 成人网在线免费看| 深夜福利日韩在线看| 国产69精品久久久久99| 97人洗澡人人免费公开视频碰碰碰| 91中文字幕在线观看| 国产91精品久久久久久久| 久久天天躁狠狠躁夜夜av| 日韩中文有码在线视频| 91精品久久久久| 国产福利精品视频| 国产精品久久久久久久久久久新郎| 国产一区红桃视频| 国产精自产拍久久久久久| 中文字幕国产日韩|