今天总结一下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;

}

}

};

(转)android客户端从服务器端获取json数据并解析的实现代码的更多相关文章

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

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下   首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...

  2. android客户端从服务器端获取json数据并解析的实现代码(重要)

    首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的URL中获取数组 * @param urlPath * @return * @throws Exc ...

  3. android通过httpClient请求获取JSON数据并且解析

    使用.net创建一个ashx文件,并response.write  json格式 public void ProcessRequest(HttpContext context) { context.R ...

  4. HttpURLConnection从网上获取Json数据并解析详解

    HttpURLConnection从网上获取Json数据并解析 1.HttpURLConnection请求数据的步骤 (1)构造一个URL接口地址: URL url = new URL("h ...

  5. JQuery 获取json数据$.getJSON方法的实例代码

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

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

    1.升级流程分析

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

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

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

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

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

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

随机推荐

  1. (转)Jquery弹窗插件Lhgdialog的用法

    Lhgdialog的用法 大家都知道用js可以实现,但是在使用js实现的弹窗时得考虑很东西:浏览器的兼容.页面的交互等等问题. 在这里简单介绍一下lhgdialog的用法. 参数有: Title:弹窗 ...

  2. JavaScript和ajax 跨域的案例

    今天突然想看下JavaScript和ajax 跨域问题,然后百度看了一下,写一个demo出来 <!DOCTYPE html> <html xmlns="http://www ...

  3. 在MVC中利用uploadify插件实现上传文件的功能

    趁着近段的空闲时间,开发任务不是很重,就一直想把以前在仓促时间里所写的多文件上传功能改一下,在网上找了很多例子,觉得uploadify还可以,就想用它来试试.实现自己想要的功能.根据官网的开发文档,同 ...

  4. 概率dp小结

    好久之前学过,记得是一次亚洲区的前几天看了看概率dp,然后亚洲区就出了一道概率dp,当时虽然做上了,但是感觉有很多地方没懂,今天起早温习了一下,觉得很多地方茅塞顿开,果然学习的话早上效果最好了. 首先 ...

  5. Extjs 兼容IE10

    在对应的地方将Ext.isIE 修改成: Ext.isIE && !(/msie 9/.test(navigator.userAgent.toLowerCase())  &&a ...

  6. Session生命周期讨论

    文章级别:Java初级    预备技能点:JSP内置对象, 监听器, 序列化           在程序开发的时候, request session appplication内置对象, 是用的比较多的 ...

  7. lazy loading img 图片延迟加载

    http://yunpan.cn/cVsjPW6dgbcsh (提取码:b5db)

  8. 万维网发布服务(w3svc)已停止,除非万维网发布服务(w3svc)正在运行。

    近来遇到一个IIS服务启动问题,重启服务器PC后,网站启动的时候,提示“ 万维网发布服务(w3svc)已停止,除非万维网发布服务(w3svc)正在运行”. 解决方法: 点击"开始" ...

  9. HTML&CSS基础学习笔记1.27-input提交数据

    提交数据 我们在表单上填的信息很多情况下需要提交到后台. <input>的[type]属性值为“submit”时,表示提交表单数据.它在页面的表现形式也是个按钮,点击该按钮,表单数据将会提 ...

  10. 未能在全局命名空间中找到类型或命名空间名称“Wuqi”

    下载了AspNetPager控件用以进行分页操作,在项目中放入控件后,运行报错:未能在全局命名空间中找到类型或命名空间名称“Wuqi” . 解决办法:在项目下拉框“引用“中添加AspNetPager引 ...