您的位置:首页 > 移动开发 > Android开发

android json访问php webservice

2012-07-07 22:22 375 查看
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发送的数据保存到服务端了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息