您的位置:首页 > 理论基础 > 计算机网络

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

2015-08-10 16:23 495 查看
网络解析基础篇:

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

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

为大家找了一个0分下载的Gson 2.3.1 :http://download.csdn.net/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!

大神勿喷!纯属简单介绍一个简单的网络交互!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: