zoukankan      html  css  js  c++  java
  • Android访问php webservice

    如果是PHP做的服务端,而我们要用android去访问,怎么办?当然可以用REST,但也可以用点笨的方法,比如可以让PHP的服务端返回JSON或XML数据,而Android端则可以用APACHE的httpclient去访问。

    下面是一个例子,假设数据表中users表有如下字段(mysql):
    idusers,UserName,FullName

    加点数据,然后在服务端建立一个webservice1.php,作用是直接返回服务端数据库的数据,如下:

    <?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',$linkor die('Cannot select the DB');
     
    $query "SELECT * FROM 'users'";
    $result = mysql_query($query,$link);
     
    $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调用:

    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);
    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
    $json file_get_contents('php://input');
    $obj = json_decode($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

    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端发送的数据保存到服务端了。

  • 相关阅读:
    Java对象的生命周期与作用域的讨论(转)
    [置顶] Oracle学习路线与方法
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/3666340.html
Copyright © 2011-2022 走看看