今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下

首先客户端从服务器端获取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;
                 }

}
         };

本文转自http://www.jb51.net/article/37985.htm,所有权利归原作者所有。

一个简单的Android客户端从服务器端获取json数据并解析的实现代码相关推荐

  1. android客户端从服务器端获取json数据并解析的实现代码

    2019独角兽企业重金招聘Python工程师标准>>> 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 代码如下: /** * 从指定的URL中获取 ...

  2. android通过json获取图片,Android-okhttp获取json数据及解析

    Okhttp简介 okhttp是目前android开发中比较流行的一个开源网络请求框架,相比于官网api提供的网络接口有很多优点. android6.0以前,官方sdk提供的是httpUrlConne ...

  3. java $.getjson_JQuery 获取json数据$.getJSON方法的实例代码

    jQuery系列 第八章 jQuery框架Ajax模块 第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是A ...

  4. 利用百度APIStoreSDK获取Json数据并解析加载到ListView上

    效果图(这里只是截取了List中的一项): 一.:登录百度ApiStore,获取移动sdk Android版(同时有使用文档和示例),将jar包导入到项目中 Android Studio请在放入lib ...

  5. 安卓开发--连接到聚合网,获取JSON数据并解析(踩了好多好多坑)

    本文将会以从聚合网获得数据为例,介绍如何在Android Studio中获取JSON并解析 这里做一个简单的天气查询的应用 文章目录 1. 准备工作--导入依赖 2. 核心代码部分 2.1 Get方式 ...

  6. 网络获取json数据并解析

    1.升级流程分析 2.Android通过URL获取网络资源 JSONObject来解析Json字符串 //创建URL对象//本机地址用localhost, 但是如果用模拟器加载本机的地址时,可以用ip ...

  7. Android HTTP网络请求获取JSON数据

  8. java中的数据解析是_Java从网络中请求获取JSon数据以及解析JSON数据----(自创,请注明)...

    Json数据是比较常用的数据类型解析,优点就不多说啦.来看看方法: public static JSONObject getJsonObject(String url) { JSONObject js ...

  9. android从服务端获取json解析显示在客户端上面,Android服务端获取json解析显示在客户端上面.doc...

    Android服务端获取json解析显示在客户端上面 Android从服务端获取json解析显示在客户端上面 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比 ...

最新文章

  1. Python实现信息自动配对爬虫排版程序
  2. java awt显示到组件中出现乱码
  3. 计算机视觉领域最全汇总(第1部分)
  4. tkinter 笔记:创建输入框并显示结果 (莫烦python笔记)
  5. Linux基础(iptables与firewalld防火墙)
  6. 【数据库系统】事务、锁、隔离、自动恢复
  7. oracle 视图及函数授权,Oracle常见1000问之内部函数及管理视图
  8. 测试面试话题4: 如何制定测试计划
  9. hibernate悲观锁,乐观锁
  10. Linux进程间通信(匿名管道)
  11. 笔记.NET基础知识05
  12. 如何成为一名更出色的开发者?
  13. 二维码扫描开源库ZXing定制化【转】
  14. 九章算法--寻找数组波峰
  15. 进程/线程间通信和同步
  16. conda: command not found
  17. 安装天文基本包:kapteyn和pyslalib
  18. JS入门必备基础知识(适合小白)
  19. 什么是封装、继承和多态
  20. c语言:四位数为AABB些型,并且是另一个书的平方,求这昂的四位数

热门文章

  1. NOI2012 Day2
  2. json与jsonp应用及其他ajax数据交互方式
  3. 新手必学的java报表开发工具FineReport实用技巧
  4. poj 2255 Tree Recovery
  5. RTT时钟管理篇——阻塞延时和时基更新函数
  6. roszhong指定rviz的点启动_怎样在1秒内启动 Linux
  7. 求最大公约数和最小公倍数简洁写法的注意事项
  8. PAT乙级(1018 锤子剪刀布)
  9. 另辟蹊径:从其他角度去解决数据库问题
  10. 记一次 Redis Cluster 宕机引发的事故