安卓和php服务器交互json,android客户端与php服务器的json数据简单交互(二)

上一篇文章讲的是最简单的通过接送的格式完成android客户端与php服务器交互,也就是通过JSONObject对象来进行交互。

从上篇的文章代码就可以看出来,如果php数组仅仅采用键值对的方式进行存储,通过很简单的方式转换为json格式,之后在android客户端进行

交互的时候通过JSONObject 也很快通过键值对的方式取到数据。

但是,有时候我们传递过来的参数并不是仅仅通过键值对的方式传递,可能比键值对的方式复杂一些(我们知道php数组的功能非常强大,支持很多种的数据存储方式,而直接通过一个json_encode() 函数就可以将php数组转化为json格式,也就是说存在不仅仅是键值对中一个key对应的都是一些简单的数据类型,可能也是数组等)。但是json同时也提供了JSONArray这一数据类型,通过一些简单的操作就可以将其转换成java中的ArrayList或者Map了。

android中包含四个与JSON有关的类和一个Exception,分别为

JSONObject:就如上篇文章提到的,包含一对儿(Key/Value)数值,注意这里的Value值保存一些基本的数据类型,

还有JSONArray,JSONOject或者默认值JSONOject.NULL object;

JSONArray:

它代表一组有序的数值,下面的代码可以非常直观的了解其用法;

JSONStringer:

根据官方解释,这个类可以帮助快速和便捷创建JSONtext.其最大的优点是可以减少由于格式的错误导致程序异常,引用这个类严格按照JSON

语法规则创建JSON text,每个JSONStringe实体只能可以对应创建一个JSON text。

JSONTokener:

这个是系统为JSONObject和JsonArray构造器解析JSON source string的类,它可以从source String中提取数值信息。

JSONException:

JSON.org抛出的异常信息

以上几个方面我们知道其实用处最多的就是JSONObject和JSONArray,下面的代码就可以很简单的了解JSONArray的基本用法了。

private boolean getJson()

{

boolean result = false;

HttpClient httpClient = new DefaultHttpClient();

//这里是你与服务器交互的地址

String validateUrl = "http://192.168.191.1/YCM/testjson.php";

//设置链接超时

httpClient.getParams().setParameter(CoreConnectionPNames.

CONNECTION_TIMEOUT, 5000);

//设置读取超时

httpClient.getParams().setParameter(

CoreConnectionPNames.SO_TIMEOUT, 5000);

HttpPost httpRequst = new HttpPost(validateUrl);

//准备传输的数据

List params = new ArrayList();

params.add(new BasicNameValuePair("user", "lewis"));

params.add(new BasicNameValuePair("password", "123"));

try

{

//发送请求

httpRequst.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

//得到响应

HttpResponse response = httpClient.execute(httpRequst);

//返回值如果为200的话则证明成功的得到了数据

if(response.getStatusLine().getStatusCode() == 200)

{

StringBuilder builder = new StringBuilder();

//将得到的数据进行解析

BufferedReader buffer = new BufferedReader(

new InputStreamReader(response.getEntity().getContent()));

for(String s =buffer.readLine(); s!= null; s = buffer.readLine())

{

builder.append(s);

}

System.out.println(builder.toString());

/*

* 数据形式

* {"success":true,

"userList":

[{"id":0,"name":"Sam"},

{"id":1,"name":"lewis"},

{"id":2,"name":"Tom"},

{"id":3,"name":"Marry"},

{"id":4,"name":"Todd"}}}

*/

//这个地方的数据形式那么就不再是单独的键值对了,还有一些其他的复杂形式

JSONObject mObject = new JSONObject(builder.toString());

boolean success = mObject.getBoolean("success");

JSONArray mJSONArray= mObject.getJSONArray("userList");

ArrayList>mArray = new ArrayList>();

for(int i = 0 ; i < mJSONArray.length(); i++)

{

JSONObject jsonItem = mJSONArray.getJSONObject(i);

int id = jsonItem.getInt("id");

String name = jsonItem.getString("name");

HashMap map = new HashMap();

map.put("id", id+"");

map.put("name", name);

mArray.add(map);

}

result = true;

}

} catch (Exception e)

{

e.printStackTrace();

}

return result;

}

这里只要清楚了JSON传输数据的格式基本上是个什么样子的,那 么该怎么获取其中的数据就很清楚了。

这里php代码也非常的简单,也采用模拟的形式

//这里应该是是从Mysql数据库中得到相应的数据,这里仅仅是模拟过程,不再写相应的数据库交互代码

$username = str_replace(" ", "", $_POST['user']);

$password = str_replace(" ", "", $_POST['password']);

$id = 1;

/*z这里尝试不同种的数组形式

*/

//这里等同的是一个二维数组

/*如果是一个二维数组的话一定要对其进行键值对标识清楚

*/

$arr = array();

$arr['success'] = true;

$arrListInfo = array();

for( $i = 0; $i< 5; $i++)

{

$arrTemp = array(

'id' => $i,

'name' => "lewis");

$arrListInfo[] = $arrTemp;

}

$arr['userList'] =$arrListInfo;

//var_dump($arr);

$strr = json_encode($arr);// 如果直接在浏览器中运行该代码就可以很清楚的看到JSON采用的格式方式了

echo($strr);

?>

这里例子不是很多,举得例子仅仅是一个有键值对和数组都存在的例子,如果仍然有疑问,可以参考一下点击打开链接,这篇文库中的例子非常多,举了好几种情况的例子,大家可以参考一下~

我想只要灵活运用了php数组,JsonObjecty以及JSONArray的话,那么从服务器获取一些简单的数据将不是问题。这里也充分的展现了php数组的魅力,

充分体现了php数组的灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值