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[];
int len = ;
URL url = new URL(urlPath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inStream = conn.getInputStream();
while ((len = inStream.read(data)) != -) {
outStream.write(data, , 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() == ) {
// 获取返回的数据
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 = ; 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 ;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return ;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(layoutID, null);
// convertView = mInflater.inflate(layoutID, null);
for (int i = ; 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();
conn.setRequestMethod("GET");
if(conn.getResponseCode() == ){
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[];
int len = ;
while( (len = inStream.read(buffer)) != -){
outStream.write(buffer, , 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()));
                 nameValuePairs.add(new BasicNameValuePair("pageSize", Integer
                         .toString()));
                 try {
                     String result = doPost(nameValuePairs, POST_URL);
                     Message msg = handler.obtainMessage(, , , 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 :{
                     // 处理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;
                 }                
             }
         };
android客户端从服务器端获取json数据并解析的实现代码(重要)的更多相关文章
- android客户端从服务器端获取json数据并解析的实现代码
		
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...
 - (转)android客户端从服务器端获取json数据并解析的实现代码
		
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 ...
 - android通过httpClient请求获取JSON数据并且解析
		
使用.net创建一个ashx文件,并response.write json格式 public void ProcessRequest(HttpContext context) { context.R ...
 - HttpURLConnection从网上获取Json数据并解析详解
		
HttpURLConnection从网上获取Json数据并解析 1.HttpURLConnection请求数据的步骤 (1)构造一个URL接口地址: URL url = new URL("h ...
 - JQuery 获取json数据$.getJSON方法的实例代码
		
这篇文章介绍了JQuery 获取json数据$.getJSON方法的实例代码,有需要的朋友可以参考一下 前台: function SelectProject() { var a = new Array ...
 - 网络获取json数据并解析
		
1.升级流程分析
 - 菜鸟学习Spring——SpringMVC注解版在服务器端获取Json字符串并解析
		
一.概述. SpringMVC在服务端把客户端传过来的JSON字符串,并把JSON字符串转成 JSON对象并取得其中的属性值,这个在项目中经常用到. 二.代码演示. 需要添加的jar包. 2.1 we ...
 - Android从服务端获取json解析显示在客户端上面
		
Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Jso ...
 - Android客户端和服务器端数据交互
		
网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第四种: 一.服务器端: 代 ...
 
随机推荐
- Android原型界面设计工具
			
第 1 页:原型界面制作工具Lumzy 第 2 页:在线工具Mockingbird 第 3 页:开源UI工具The Pencil Project 第 4 页:JS开发工具包Dojo 第 5 ...
 - DWR常用<init-param>参数
			
1 安全参数 allowGetForSafariButMakeForgeryEasier 开始版本:2.0 默认值:false 描述:设置成true使DWR工作在Safari 1.x , 会稍微降低安 ...
 - oracle 查询表名以及表的列名
			
oracle 查询表名以及表的列名的代码. 1.查询表名: 代码如下: select table_name,tablespace_name,temporary from user_tables [ ...
 - MTK 2G芯片使用联通卡在深圳无法拨打112原因
			
2.75G GSM模块在深圳客户这边联调到最后,客户这边遇到各种概率性问题,基本都是对方使用的配件不够好造成的,如天线.SIM卡座等配件. 一旦这些配件不好,就会出现概率性的错误,非常难以复现,所以在 ...
 - SQL Server 2000 函数使用---CAST 和 CONVERT
			
本文来自:http://www.cnblogs.com/xh831213/category/47654.html 将某种数据类型的表达式显式转换为另一种数据类型.CAST 和 CONVERT 提供相似 ...
 - jQuery -> end方法的使用方法
			
我们在对结果集使用find.filter等方法时,会改变结果集. 这样的改变原先结果集的方法被称作destructive jQuery method jQuery cookbook有例如以下定义: A ...
 - swift中通知的使用
			
1.发通知.(以这条通知为例,通知名字:gameOverNotification.通知参数:title) NSNotificationCenter.defaultCenter().postNotifi ...
 - [有向图的强连通分量][Tarjan算法]
			
https://www.byvoid.com/blog/scc-tarjan 主要思想 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树.搜索时,把当前搜索树中未处理的 ...
 - Springmvc和velocity使用的公用后台分页
			
Springmvc和velocity使用的公用后台分页 类别 [选择一个类别或键入一个新类别] Springmvc和velocity使用的公用后台分页 样式: 使 ...
 - js页面换行与空格
			
1.换行 +'<br/>\n': 2.空格 1#JS——输出内容document.write#用于直接向 HTML 输出流写内容.简单的说就是直接在网页中输出内容.1.输出内容用“”括起, ...