Android开发进阶(七)-- Android客户端访问PHP服务器的详细过程

 一 Android客户端 提交请求

 

 二  服务器端 返回Json数据

             交互数据有俩种交互方式:xml与Json.(本篇重点练习Json)

             服务器根据提交的请求 作为查询条件 访问mysql数据库,得到的查询结果经服务器处理,以Json格式返回到客户端

三  客户端解析Json数据(这里使用的是JsonObject包)

 

四 关键代码:

 

  1  httpclient 请求

//android
public class GoWinHttp {
    //通过post获得数据
    public static String postHttpData(String url,List<NameValuePair> nameValuePairs)
    {
        String resultStr=null;
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
         try {
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response; 
                response=httpclient.execute(httppost);     
                resultStr=EntityUtils.toString(response.getEntity());
            } catch (UnsupportedEncodingException e) {
                Log.d(url, "UnsupportedEncodingException");
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                Log.d(url, "ClientProtocolException");
                e.printStackTrace();
            } catch (IOException e) {
                Log.d(url, "IOException");
                e.printStackTrace();
            }
            return resultStr; 
    }
}
List<NameValuePair> nameValuePairs  构建  这是,post给php的参数
nameValuePairs.add(new BasicNameValuePair("key","value"));
 
2 解析方法
 

//解析方法,主要是,这里有一点特殊,就是开始第一个json对象是jsonObject 和JSONArray 有一点不同,jsonObject 是指json最开始以{开始的,而以[开始的是JSONArray ,没仔细研究,这里他们都是字符串

//解析JSON数据
    public static List<Map<String,String>>resolveData(String jsonStr)
    {
        List<Map<String,String>>ls=new ArrayList<Map<String,String>>();
        Map<String,String> data;
        JSONObject jsonObject;
        JSONArray jsonArr;
        JSONArray nameArr;
        try {
            jsonArr=new JSONArray(jsonStr);
            for(int i=0;i<jsonArr.length();i++)
            {
                jsonObject=jsonArr.getJSONObject(i);
                nameArr=jsonObject.names();
                data=new HashMap<String,String>();
                String name;
                for(int j=0;j<nameArr.length();j++)
                {
                    name=nameArr.getString(j);
                    data.put(name, jsonObject.getString(name));
                }
                ls.add(data);                
            }
            
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ls;        
    }

3  Json格式


//php上面不管以任何方式得到一个数组,然后将数组编码成为json格式

//这里有一个方法可以将一整张表转换为数组

<?php
 //获取一张表的所有数据
function getTabDatas($tabName,$link){
if($tabName=="")
    {
        exit;
    }
    $sqlStr='SELECT * FROM '.$tabName;    
    $result = mysql_query($sqlStr, $link);
    if (!$result) {
        exit;    
    }   
    $fields= array();
     for ($i=0; $i<mysql_num_fields($result); $i++)
    {     
     $fields[] =mysql_field_name($result, $i);      
    }    
    $arr=array();
    while ($row = mysql_fetch_assoc($result)) {
    $once=array();
    
        foreach ($fields as $value)
        {
           $once[$value]=$row[$value];           
        }
    
    $arr[]=$once;    
    }    
    mysql_free_result($result);    
    closeSqlconn();
    return $arr;
}
?>

//然后php只需要将得到的数组格式化为json就行了

 $json_string = json_encode($resArr);
echo $json_string;

//超时请求
        httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
        //读取超时
        httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值