本文主要是介绍Android使用GSON和FASTJSON解析服务器返回的JSON数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在一个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() {@Overridepublic 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();}}@Overridepublic 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>
此外,本人为在校学生,如果有不同或者是更好的写法亦或者是错误的地方,还请指出和多多分享,共勉~
这篇关于Android使用GSON和FASTJSON解析服务器返回的JSON数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!