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

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

首先客户端从服务器端获取json数据

1、利用HttpUrlConnection

/*** 从指定的URL中获取数组

*@paramurlPath

*@return*@throwsException*/

public static String readParse(String urlPath) throwsException {

ByteArrayOutputStream outStream= newByteArrayOutputStream();byte[] data = new byte[1024];int len = 0;

URL url= newURL(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数据字符串

*

*@paramparams 向服务器端传的参数

*@paramurl

*@return*@throwsException*/

public static String doPost(Listparams, String url)throwsException {

String result= null;//获取HttpClient对象

HttpClient httpClient = newDefaultHttpClient();//新建HttpPost对象

HttpPost httpPost = newHttpPost(url);if (params != null) {//设置字符集

HttpEntity entity = newUrlEncodedFormEntity(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方式请求失败");

}returnresult;

}

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

/*** 解析

*

*@throwsJSONException*/

private static ArrayList>Analysis(String jsonStr)throwsJSONException {/******************* 解析 ***********************/JSONArray jsonArray= null;//初始化list数组对象

ArrayList> list = new ArrayList>();

jsonArray= newJSONArray(jsonStr);for (int i = 0; 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);

}returnlist;

}

最后数据适配:

1、TextView

/*** readParse(String)从服务器端获取数据

* Analysis(String)解析json数据*/

private voidresultJson() {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 voidproduct_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(HashMapnews : 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(newOnItemClickListener() {public void onItemClick(AdapterView> arg0, View arg1, intarg2,longarg3) {

login_publicchannel_trl_sub(arg2);

}

});

}

对于有图片的要重写适配器

packagecom.nuoter.adapterUntil;importjava.util.HashMap;importjava.util.List;importandroid.content.Context;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.Paint;importandroid.net.Uri;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;importandroid.widget.LinearLayout;importandroid.widget.TextView;public class MySimpleAdapter1 extendsBaseAdapter {privateLayoutInflater mInflater;private List>list;private intlayoutID;privateString flag[];private intItemIDs[];public MySimpleAdapter1(Context context, List>list,int layoutID, String flag[], intItemIDs[]) {this.mInflater =LayoutInflater.from(context);this.list =list;this.layoutID =layoutID;this.flag =flag;this.ItemIDs =ItemIDs;

}

@Overridepublic intgetCount() {//TODO Auto-generated method stub

returnlist.size();

}

@Overridepublic Object getItem(intarg0) {//TODO Auto-generated method stub

return 0;

}

@Overridepublic long getItemId(intarg0) {//TODO Auto-generated method stub

return 0;

}

@Overridepublic View getView(intposition, 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]) instanceofImageView) {

ImageView imgView=(ImageView) convertView.findViewById(ItemIDs[i]);

imgView.setImageBitmap((Bitmap) list.get(position).get(flag[i]));///关键是这句!!!!!!!!!!!!!!!

}else if (convertView.findViewById(ItemIDs[i]) instanceofTextView) {

TextView tv=(TextView) convertView.findViewById(ItemIDs[i]);

tv.setText((String) list.get(position).get(flag[i]));

}else{//...备注2

}

}//addListener(convertView);

returnconvertView;

}/*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工具类

packagecom.nuoter.adapterUntil;importjava.io.ByteArrayOutputStream;importjava.io.InputStream;importjava.net.HttpURLConnection;importjava.net.URL;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;public classImageService {/*** 获取网络图片的数据

*@parampath 网络图片路径

*@return

*/

public static Bitmap getImage(String path) throwsException{/*URL url = new URL(imageUrl);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

InputStream is = conn.getInputStream();

mBitmap = BitmapFactory.decodeStream(is);*/Bitmap bitmap= null;

URL url= newURL(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);

}returnbitmap;

}/*** 读取流中的数据 从url获取json数据

*@paraminStream

*@return*@throwsException*/

public static byte[] read(InputStream inStream) throwsException{

ByteArrayOutputStream outStream= newByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while( (len = inStream.read(buffer)) != -1){

outStream.write(buffer,0, len);

}

inStream.close();returnoutStream.toByteArray();

}

}

上面也将从url处获取网络数据写在了工具类ImageService中方面调用,因为都是一样的。

当然也可以在Activity类中写一个获取服务器图片的函数(当用处不多时)

/** 从服务器取图片

* 参数:String类型

* 返回:Bitmap类型*/

public staticBitmap getHttpBitmap(String urlpath) {

Bitmap bitmap= null;try{//生成一个URL对象

URL url = newURL(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());

}returnbitmap;

}

调用:

publicImageView 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);

另附 下载数据很慢时建立子线程并传参:

newThread() {

@Overridepublic voidrun() {//参数列表

List nameValuePairs = new ArrayList();

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 = newHandler() {public voidhandleMessage(Message msg) {switch(msg.what) {case 1:{//处理UI

StringBuffer strbuf = newStringBuffer();

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(HashMapnews : 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;

}

}

};

http://www.dengb.com/Androidjc/1156162.htmlwww.dengb.comtruehttp://www.dengb.com/Androidjc/1156162.htmlTechArticleandroid客户端从服务器端获取json数据并解析的实现代码,androidjson 今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值