网络访问基础篇(适合新手)

本文详细介绍了如何使用Gson包处理JSON数据进行网络交互,包括反射机制、反射Bean属性、处理GET请求及错误情况。同时,提供了一个简易的网络交互示例,并附上Gson2.3.1的下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


网络解析基础篇:

网络解析百分之八十多是用的Json作为数据格式,也有个别使用xml,那么今天就用json来做网络交互,我们自己手工去解json的话会很繁琐,那么我们一般会借助反射机制,来反射Bean中的属性,吧json属性的key跟属性名equals就行。没错,,有人会知道,这就是google的Gson包所做的事情,那么我们就借助Gson来做个简易的网络交互。

这里,我就不写反射代码了,直接下载Gson,使用Gson现成提供的方法来实现:

为大家找了一个0分下载的Gson 2.3.1 :http://download.youkuaiyun.com/detail/zxyyxzzxy004/8206489

这里以get方法为例:

public class NetConnector {

	public static final int SUCCESS = 0;

	public static final int ERROR = -1;

	private static HttpClient client = new DefaultHttpClient();
	private static AsyncHttpClient asyncClient = new AsyncHttpClient();

	public static void doGet(String url, HashMap<String,String> params,Class<?> clazz, Handler handler) {
		Message msg = Message.obtain();
		String currUrl = handleGetUrl(url, params);
		try {
			HttpGet get = new HttpGet(currUrl);
			HttpResponse responce = client.execute(get);
			if (responce.getStatusLine().getStatusCode() == 200) {
				String jsonStr = EntityUtils.toString(responce.getEntity(),
						"UTF-8");
				Gson gson = new Gson();
				TypeToken<?> token = TypeToken.get(clazz);
				msg.obj = gson.fromJson(jsonStr, token.getType());
				msg.what = SUCCESS;
				handler.sendMessage(msg);
			} else {
				msg.what = ERROR;
				msg.obj = "获取服务器数据失败,请稍后重试!";
				handler.sendMessage(msg);
			}

		} catch (ClientProtocolException e) {
			e.printStackTrace();
			msg.what = ERROR;
			msg.obj = "访问服务器失败!";
			handler.sendMessage(msg);
		} catch (SocketTimeoutException e) {
			e.printStackTrace();
			msg.what = ERROR;
			msg.obj = "连接服务器超时!";
			handler.sendMessage(msg);
		} catch (ConnectTimeoutException e) {
			e.printStackTrace();
			msg.what = ERROR;
			msg.obj = "连接服务器超时!";
			handler.sendMessage(msg);
		} catch (IOException e) {
			e.printStackTrace();
			msg.what = ERROR;
			msg.obj = "数据获取失败!";
			handler.sendMessage(msg);
		}
	}
}

handleGetUrl方法:

private static String handleGetUrl(String url,HashMap<String,String> params){
		StringBuffer sBuffer = new StringBuffer(url);
		if(!url.endsWith("?"))
			sBuffer.append("?");
		
		int i = 0;
		for (String key : params.keySet()) {
			String value = params.get(key);
			sBuffer.append(key+"="+value);
			if(!(i==params.size()-1))
				sBuffer.append("&");
			i++;
		}
		return sBuffer.toString();
	}

我来解释下:


先看一段Json:

{

"state":"200",

"msg":"成功",

"time":"2015-8-4 15:59",

"result":{

token:"347f296f3f0f4f1753c6cea42c5ecc70", //key

id:"11", //id

username:"18910416762", //账号

nickname:"张三", //昵称

headimg:"1.jpg", //头像

mobile:"13456543423", //手机号

password:"347f296f3f0f4f1753c6cea42c5ecc70" //密码

}

}



4个参数,

String url,//接口地址
 HashMap<String,String> params//参数列表
,Class<?> clazz,//将要回递给你的Bean对象,这是核心,Gson将反射它。来解析Json中的数据,然后一一对应进行赋值,这里重点解释这个。。Gson有个规范
                 // 如果想通过Gson解析,那么必须按照它的规范来,那么我来简单解释下这个规范,例如:

 /*
 package com.angelonline.obj;

import java.io.Serializable;

public class LoginObj implements Serializable{

    private static final long serialVersionUID = 5018899594211061547L;
    
    
    private String token = "";//:"347f296f3f0f4f1753c6cea42c5ecc70", //key
    private String id = "";//:"11",    //id
    private String username = "";//:"18910416762", //账号
    private String nickname = "";//:"张三",    //昵称
    private String headimg = "";//:"1.jpg", //头像
    private String mobile = "";//:"13456543423", //手机号
    private String password = "";//:"347f296f3f0f4f1753c6cea42c5ecc70" //密码
    
    public LoginObj(){}
    
    public LoginObj(String token,String id,String username,String nickname,String headimg,String mobile,String password){
        this.token = token;
        this.id = id;
        this.username = username;
        this.nickname = nickname;
        this.headimg = headimg;
        this.mobile = mobile;
        this.password = password;
    }
    
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getHeadimg() {
        return headimg;
    }
    public void setHeadimg(String headimg) {
        this.headimg = headimg;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    
    
}
*/

Handler handler//回调

解释的有点笼统,具体了解请见Gson解析,去google官方或者百度更多demo。

说明下,如果服务器没有返回对应的值,那么将对应的key将是默认赋给null,

如果发现爆Google。xxx。xxx或者Gson.xxx.xxx等Exception,不要着急,耐心的慢慢排查你的bean,

八成是bean的结构不规范。照着上面的例子,调整下结构就行,,


Post方法同理,只要获取到Json,剩下部分完全可以原样copy!


大神勿喷!纯属简单介绍一个简单的网络交互!





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值