展会信息港展会大全

Android访问php webservice
来源:互联网   发布日期:2015-09-28 15:43:38   浏览:1893次  

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

如果是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',$link) or 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);

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

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

赞助本站

人工智能实验室

相关热词: Android php webservice

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港