在一个app中,没办法避免的就是网络请求这一块,那么我们在与服务器连接,发送请求的时候,就会接收到服务器返回的结果,这种结果可以是XML格式,但更多的是JSON,所以我们在客户端就必须解析JSON数据,就拿登录这一个功能举例,用户输入账号密码,客户端发送登录请求,服务器接受请求并响应发送结果返回客户端,客户端通过解析JSON数据来判断是否登录成。
首先我们在使用GSON或者FASTJSON之前都可以先看看官方的文档来了解这两个解析JSON的工具是如何实现其功能的(GSON是谷歌的,而FASTJSON是阿里巴巴的)
GSON文档相关:http://www.oschina.net/p/google-json
FASTJSON文档相关:https://github.com/alibaba/fastjson
在GSON和FASTJSON中,一般都会通过创建JavaBean来通过get方法获取JSON内部的数据
例如下面这个User.class
<span style="font-size:14px;">public class User{
private String type;
private String message;
private int code;
public String gettype() {
return type;
}
public void settype(String type) {
this.type = type;
}
public String getmessage() {
return message;
}
public void setmessage(String message) {
this.message = message;
}
public int getcode(){
return code;
}
public void srtcode(int code){
this.code = code;
}
}
</span>
然后再在网络请求成功后,如下调用:(其中的code对应的结果代码是由接口后台设置而定)
<span style="font-size:14px;">private void loginAsyncHttpClientPost(String userName,
String userPass) {
// 发送请求到服务器
AsyncHttpClient client = new AsyncHttpClient();
String url = getString(R.string.user_login_post_url);//请求接口
// 创建请求参数
RequestParams params = new RequestParams();
params.put("stuid", userName);
params.put("password", userPass);
// 执行post方法
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
//解析返回的JSON数据
<span style="color:#ff0000;">String jsonData = new String(responseBody);
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);</span>
if(user.getcode() == 1){
Toast toast2 = Toast.makeText(getApplicationContext(),"登录成功!",Toast.LENGTH_SHORT);
toast2.show();
Intent intent3 = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent3);
LoginActivity.this.finish();
}else if(user.getcode() == 2){
AlertDialog alert = new AlertDialog.Builder(LoginActivity.this).create();
//设置Title的内容
alert.setTitle("错误");
//设置Content来显示一个信息
alert.setMessage("抱歉!您的账号与密码不匹配,请确认后重新输入!");
//显示弹窗
alert.show();
}
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
// 打印错误信息
error.printStackTrace();
}
});
}
</span>
同样的FASTJSON也可以按这种写法,此外,还有一种简单的写法,即使用FASTJSON 的写法
直接贴代码:
<span style="font-size:14px;">public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
//GSON解析返回的JSON数据
String jsonData = new String(responseBody);
JSONObject user = JSON.parseObject(jsonData);
Log.e("***登录信息返回***",""+user.get("message"));
</span>
通过这种写法不用再新增一个java类就可以解析JSON数据,如果返回的JSON是多层嵌套的,写法如下:
<span style="font-size:14px;"> public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
//解析返回的JSON数据
String jsonData = new String(responseBody);
JSONObject msg = JSON.parseObject(jsonData);//msg为第一层json数据
JSONObject psmg = msg.getJSONObject("data");//pmsg为第二层个人详细信息json数据
Log.e("***查询第一层信息返回结果***",""+msg.get("message"));
Log.e("***查询第二层信息返回结果***",""+psmg.getJSONObject("username"));</span>
此外,本人为在校学生,如果有不同或者是更好的写法亦或者是错误的地方,还请指出和多多分享,共勉~