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<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
                    
                    
                    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<HashMap<String, String>>mArray = new ArrayList<HashMap<String,String>>();
                                        
                                        
                                        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<String, String>();
                                                  map.put("id", id+"");
                                                  map.put("name", name);
                                                  mArray.add(map);
                                        }
                                        
                                        
                                       result = true;
                                        
                              }
                              
                    } catch (Exception e)
                    {
                              e.printStackTrace();
                    }
                    
                    return result;
                    
          }

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


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

<?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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值