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数据的实现代码,需要的朋友...