JSON

与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件

字号+ 作者:H5之家 来源:H5之家 2015-10-06 14:13 我要评论( )

android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据-jquery-爱编程

补充:关于PHP服务端可能出现的问题:

如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!!

在android应用中访问的IP都是10.0.2.2,如果在apache虚拟主机配置文件中配置了多个虚拟主机,那么将默认解析为对第一个虚拟主机的请求,所以,在调试android应用时,应该将对应的服务端所配置的那个虚拟主机放在配置文件中的第一个虚拟主机的位置。否则就会出现请求的文件不存在等的错误。

服务端返回JSON数据及在android应用中解析JSON数据:

1.新建一个json.php文件,返回json格式的数据:

1 <?php (isset($_REQUEST["username"])&& isset($_REQUEST["password"])){ = $_REQUEST["username"]; = $_REQUEST["password"]; ($username == "zhangsan" && $password == "123"){ = array( 12 13 "errorCode"=>200, 14 15 "errorMsg"=>"login success" 16 17 ); json_encode($arr); 20 21 }else{ = array( 24 25 "errorCode"=>404, 26 27 "errorMsg"=>"login failure" 28 29 ); json_encode($arr); 32 33 } 34 35 }else{ = array( 38 39 "errorCode"=>500, 40 41 "errorMsg"=>"illeagle params" 42 43 ); json_encode($arr); 46 47 } 48 49 ?>

返回的信息格式如下:

{"errorCode":500,"errorMsg":"illeagle params"}

 

一个大括号内的表示的是一个json对象,内部存储的是键值对数据,键与值用冒号分隔,多个键值对之间用逗号分隔。

形式如同下面格式的是json array对象:

[{"errorCode":200,"errorMsg":"login success"},{"errorCode":200,"errorMsg":"login success"},{"errorCode":200,"errorMsg":"login success"}]

 

中括号里面存放的是用逗号分隔的一个个json对象。

2.Android中要解析json格式数据需要用到的类有JSONObject和JSONArray:

JSONObject直接使用传入字符串形式的参数的构造方法创建JSONObject实例,然后调用相应的get方法,即可获取json形式数据中的每个键对应的值。

当返回的数据是用中括号括着的多个json形式字符串是,就要用到JSONArray了,同样可以使用字符串参数构造出JSONArray实例,然后可以使用下标的形式获取到其中的每一个JSONObject对象,然后使用JSONObject的方法分别取解析即可。

简单使用示例:

在MainActivity中添加上修改Handler的消息处理方法,当前通过get或者post取得的是json格式的数据,所以添加上对json数据的解析:

1 private Handler handler = new Handler(){ handleMessage(android.os.Message msg) { (msg.what == OK){ 6 7 String str = msg.obj.toString(); { 10 11 JSONObject obj = new JSONObject(str); 12 13 Log.i(TAG,obj.getString("errorCode")); 14 15 Log.i(TAG,obj.getString("errorMsg")); 16 17 } catch (JSONException e) { e.printStackTrace(); 22 23 } } 28 29 } 30 31 };

运行结果:

 

 

有时候,服务端返回的可能是一些实体类信息,若用户登录成功,返回存放用户个人信息用以缓存在本地,这时,可能希望直接能将返回的JSON格式的数据解析为实体类对象,以简化操作。使用JSONObject类当然也能实现,只要获取到各个字段的值,然后通过它们构造实体类对象即可。但是,还有更简单的方式,那就是使用GSON。

3.使用GSON解析json数据:

要在自己项目中使用GSON,有两种方式:

方式1:从网上下载gson的jar包,放到项目的libs目录中,然后添加到项目的build path中,就可以直接使用GSON了

方式2:下载GSON的源码,可以到github上下载,然后把源码整个复制到src目录下,之后也可以直接使用GSON了。

下面是GSON的简单使用示例,更多的使用可以参考GSON的帮助文档:在下载源码的包中有docs目录,里面就是GSON使用的帮助文档,可以在需要时参考。

新建一个实体类,存放返回的errorCode和errorMsg:

1 package cn.csc.start.bean; ResponseInfo { errorCode; String errorMsg; getErrorCode() { errorCode; 14 15 } setErrorCode(int errorCode) { .errorCode = errorCode; 20 21 } String getErrorMsg() { errorMsg; 26 27 } setErrorMsg(String errorMsg) { .errorMsg = errorMsg; 32 33 } ResponseInfo(int errorCode, String errorMsg) { (); .errorCode = errorCode; .errorMsg = errorMsg; 42 43 } ResponseInfo() { (); 48 49 } 50 51 }

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评