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

  • 相关阅读:
    SqlLikeAttribute 特性增加 左、右Like实现
    MySql高效分页SQL
    ConcurrentQueue对列的基本使用方式
    第一次
    kubeadm搭建高可用k8s平台(多master)
    prometheus监控
    pyecharts地图中显示地名
    anaconda安装及使用
    Python的pyecharts安装
    安装MY SQL详细步骤
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/3666340.html
Copyright © 2020-2023  润新知