android客户端从服务器端获取json数据并解析,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 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> Analysis(String jsonStr)

throws JSONException {

/******************* 解析 ***********************/

JSONArray jsonArray = null;

// 初始化list数组对象

ArrayList> list = new ArrayList>();

jsonArray = new JSONArray(jsonStr);

for (int i = ; i < jsonArray.length(); i++) {

JSONObject jsonObject = jsonArray.getJSONObject(i);

// 初始化map数组对象

HashMap map = new HashMap();

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> it = allData.iterator();

while (it.hasNext()) {

Map 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> lists = null;

try {

lists = Analysis(readParse(url));//解析出json数据

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

List> data = new ArrayList>();

for(HashMap news : lists){

HashMap item = new HashMap();

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> list;

private int layoutID;

private String flag[];

private int ItemIDs[];

public MySimpleAdapter1(Context context, List> 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> it=allData.iterator();

while(it.hasNext()){

Map 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 nameValuePairs = new ArrayList();

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> lists = null;

try {

lists = MainActivity.this

.parseJson(msg.obj.toString());

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

List> data = new ArrayList>();

for(HashMap news : lists){

HashMap item = new HashMap();

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数据的实现代码,需要的朋友可以参考下   首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...

&lpar;转&rpar;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数据&dollar;&period;getJSON方法的实例代码

这篇文章介绍了JQuery 获取json数据$.getJSON方法的实例代码,有需要的朋友可以参考一下 前台: function SelectProject() { var a = new Array ...

菜鸟学习Spring——SpringMVC注解版在服务器端获取Json字符串并解析

一.概述. SpringMVC在服务端把客户端传过来的JSON字符串,并把JSON字符串转成 JSON对象并取得其中的属性值,这个在项目中经常用到. 二.代码演示. 需要添加的jar包. 2.1 we ...

Android从服务端获取json解析显示在客户端上面

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

Android客户端和服务器端数据交互

网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第四种: 一.服务器端: 代 ...

随机推荐

2879&colon; &lbrack;Noi2012&rsqb;美食节 - BZOJ

Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

vs2015 配置opencv3&period;0遇到的问题

1.问题 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C2872 "ACCESS_MASK": 不明确的符号 FaceFeature_GSF C:\Program Fi ...

hdu 2438

Problem Description Mr. West bought a new car! So he is travelling around the city. One day he comes ...

IT痴汉的工作现状16-职业发展

回首多年来的工作经历.发现自己的职业发展真是太平庸只是了.就像我的名字张伟,平淡无奇.而我,还是几年前刚入职模样的我,仍然像个涉世未深的矛头小子,相信技术能够改变世界.真是一入IT深似海,为伊消得人憔 ...

redis工具

pom.xml添加 redis.clients

Goldengate OGG常见问题与错误列表

Goldengate OGG常见问题与错误列表  以下列出了OGG一些常见的问题与错误及其解答:   Note: 966211.1 How To Resync A Single Table With ...

mysql手动设置数据表的自增值

设置表tablename的自增值从1开始自增值 alter table tablename auto_increment=1;

maven学习(6)-Maven依赖范围

一.maven依赖范围: classpath 分为三种:编译classpath , 测试classpath , 运行classpath Scope 选项如下: Compile:编译依赖范围.默认就是c ...

php连接mssql

首先修改php.ini,将下行的前的分号去掉. extension=php_mssql.dll 由于本机没有安装客户端,所以要将ntwdblib.dll复制到C:\WINDOWS\system32目录 ...

google&sol;protobuf&sol;releases&sol;tag&sol;v3&period;4&period;0 下载

Protocol Buffers v3.4.0 Downloads 4.07 MB protobuf-cpp-3.4.0.tar.gz 5.02 MB protobuf-cpp-3.4.0.zip 4 ...

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值