android APP调用php webservice实例

该案例使用PHP做的服务端,然后使用android客户端去访问(可以使用REST)。但也可以用点 笨的方法,比如PHP的服务端可以用JSON和XML提供返回的数据,而android端则可以用 APACHE的httpclient去访问。

        下面是一个例子,假设数据表中users表有如下字段(mysql):(idusers,UserName,FullName),加点数据。然后在服务端PHP,建立一个 webservice1.php,作用是直接返回服务端数据库的数据,如下:

php代码


 
123456789101112131415161718192021222324252627282930313233343536373839404142
<?php   
if(isset($_GET[ 'user']) && intval($_GET[ 'user'])) {  
     $format = strtolower($_GET[ 'format']) ==  'json' ?  'json' :  'xml'; //xml is the default  
  $user_id = intval($_GET[ 'user']); //no default  
  
  /* 连接数据库*/  
  $link = mysql_connect( 'localhost', 'root', 'xxxxx') or die( 'Cannot connect to the DB');  
  mysql_select_db( 'jsonandroid',$link) or die( 'Cannot select the DB');  
     $query =  "SELECT * FROM `users`;";  
  $result = mysql_query($query,$link) or die( 'Errant query:  '.$query);  
    $posts = array();  
  if(mysql_num_rows($result)) {  
    while($post = mysql_fetch_assoc($result)) {  
      $posts[] = array( 'post'=>$post);  
    }  
  }  
  
  /* json格式*/  
  if($format ==  'json') {  
    header( 'Content-type: application/json');  
    echo json_encode(array( 'posts'=>$posts));  
  }  
  else {  
    header( 'Content-type: text/xml');  
    echo  '<posts>';  
    foreach($posts as $index => $post) {  
      if(is_array($post)) {  
        foreach($post as $key => $value) {  
          echo  '<',$key, '>';  
          if(is_array($value)) {  
            foreach($value as $tag => $val) {  
              echo  '<',$tag, '>',html entities($val), '</',$tag, '>';  
            }  
          }  
          echo  '</',$key, '>';  
        }  
      }  
    }  
    echo  '</posts>';  
  } 
  }  
 ?>

        则可以把数据表输出为JSON或者XML格式了。客户端的ANDROID调用:

Java代码 


 
1234567891011121314151617181920212223242526272829303132
try {  
            HttpParams httpParams = new BasicHttpParams();  
            HttpConnectionParams.setConnectionTimeout(httpParams,  
                    TIMEOUT_MILLISEC);  
            HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);  
            HttpParams p = new BasicHttpParams();  
            p.setParameter( "user""1");  
            HttpClient httpclient = new DefaultHttpClient(p);  
            String url =  "http://10.0.2.2:8082/myphp/phpWebservice/webservice1.php?user=1&format=json";  
            HttpPost httppost = new HttpPost(url);  
            try {  
                Log.i(getClass().getSimpleName(),  "send  task - start");  
                List< NameValuePair> nameValuePairs = new ArrayList< NameValuePair>(2);  
                nameValuePairs.add(new BasicNameValuePair( "user""1"));  
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  
                ResponseHandler< String> responseHandler = new BasicResponseHandler();  
                String responseBody = httpclient.execute(httppost, responseHandler);  
                // 解析JSON返回的                
                JSONObject json = new JSONObject(responseBody);  
                JSONArray jArray = json.getJSONArray( "posts");  
                ArrayList< HashMap< String, String>> mylist = new ArrayList< HashMap< String, String>>();  
                for (int i = 0; i < jArray.length(); i++) {  
                    HashMap< String, String> map = new HashMap< String, String>();  
                    JSONObject e = jArray.getJSONObject(i);  
                    String s = e.getString( "post");  
                    JSONObject jObject = new JSONObject(s);  
                    map.put( "idusers", jObject.getString( "idusers"));  
                    map.put( "UserName", jObject.getString( "UserName"));  
                    map.put( "FullName", jObject.getString( "FullName"));  
                    mylist.add(map);  
                }  
                Toast.makeText(this, responseBody, Toast.LENGTH_LONG).show();

        再搞个webservice2.php,该文件用来把客户端传送过去的JSON数据保存:

php代码 


 
1234567891011121314
<?php   
$json = file_get_contents( 'php://input');  
$obj = json_decode($json);  
//echo $json;  
//保存数据库  
$con = mysql_connect( 'localhost', 'root', 'XXX') or die( 'Cannot connect to the DB');  
mysql_select_db( 'jsonandroid',$con);  
mysql_query( "INSERT INTO `users` (UserName, FullName)  
VALUES ('".$obj->{ 'UserName'}. "', '".$obj->{ 'FullName'}. "')");  
mysql_close($con);  
  $posts = array(1);  
    header( 'Content-type: app

android APP调用php webservice实例讲解

lication/json');  
    echo json_encode(array( 'posts'=>$posts));  
?>

  而ANDROID端的,可以构造JSON,发送到webservice2.php 

Java代码 


 
12345678910111213141516171819202122
try {  
            JSONObject json = new JSONObject();  
            json.put( "UserName""test2");  
            json.put( "FullName""1234567");  
            HttpParams httpParams = new BasicHttpParams();  
            HttpConnectionParams.setConnectionTimeout(httpParams,  
                    TIMEOUT_MILLISEC);  
            HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);  
            HttpClient client = new DefaultHttpClient(httpParams);  
                String url =  "http://10.0.2.2:8082//myphp/phpWebservice/webservice2.php"
            HttpPost request = new HttpPost(url);  
            request.setEntity(new ByteArrayEntity(json.toString().getBytes( "UTF8")));  
            request.setHeader( "json", json.toString());  
            HttpResponse response = client.execute(request);  
            HttpEntity entity = response.getEntity();  
            if (entity != null) {  
                InputStream instream = entity.getContent();  
                String result = RestClient.convertStreamToString(instream);  
                Log.i( "Read from server", result);  
                Toast.makeText(this,  result,  
                        Toast.LENGTH_LONG).show();  
            }

这样,就可以把ANDROID发送的数据保存到服务端了 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值