android json访问php webservice

http://sizeed.blog.163.com/blog/static/965254512012412955872/


  如果是PHP做的服务端,要用android去访问,如何办?当然可以用REST,但也可以用点
笨的方法,比如PHP的服务端可以用JSON和XML提供返回的数据,而android端则可以用
APACHE的httpclient去访问.
  下面是一个例子,假设数据表中users表有如下字段(mysql):
idusers,UserName,FullName,加点数据.然后在服务端PHP,建立一个
webservice1.php,作用是直接返回服务端数据库的数据,如下:
Java代码 
<?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,'>',htmlentities($val),'</',$tag,'>';  
            }  
          }  
          echo '</',$key,'>';  
        }  
      }  
    }  
    echo '</posts>';  
  }  
 
  }  
 ?>  

<?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,'>',htmlentities($val),'</',$tag,'>';
            }
          }
          echo '</',$key,'>';
        }
      }
    }
    echo '</posts>';
  }

  }
 ?>

 

   则可以把数据表输出为JSON或者XML格式了.客户端的ANDROID调用:
Java代码 
 
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(); 


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数据保存
Java代码 
 
<?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: application/json');  
    echo json_encode(array('posts'=>$posts));  
 
?> 


<?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: application/json');
    echo json_encode(array('posts'=>$posts));

?>


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

Java代码 
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();  
            } 

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、付费专栏及课程。

余额充值