该案例使用PHP做的服务端,然后使用android客户端去访问(可以使用REST)。但也可以用点 笨的方法,比如PHP的服务端可以用JSON和XML提供返回的数据,而android端则可以用 APACHE的httpclient去访问。
下面是一个例子,假设数据表中users表有如下字段(mysql):(idusers,UserName,FullName),加点数据。然后在服务端PHP,建立一个 webservice1.php,作用是直接返回服务端数据库的数据,如下:
php代码
123456789101112131415161718192021222324252627282930313233343536373839404142
<?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
'</',$key,
'>';
}
}
}
echo
'</posts>';
}
}
?>
则可以把数据表输出为JSON或者XML格式了。客户端的ANDROID调用:
Java代码
1234567891011121314151617181920212223242526272829303132
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<
> nameValuePairs = new ArrayList<
>(2);
nameValuePairs.add(new BasicNameValuePair(
"user",
"1"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
ResponseHandler<
> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, responseHandler);
// 解析JSON返回的
JSONObject json = new JSONObject(responseBody);
JSONArray jArray = json.getJSONArray(
"posts");
ArrayList<
<
, String>> mylist = new ArrayList<
<
, String>>();
for (int i = 0; i < jArray.length(); i++) {
HashMap<
, String> map = new HashMap<
, 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代码
1234567891011121314
<?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: app
android APP调用php webservice实例讲解
lication/json');
echo json_encode(array(
'posts'=>$posts));
?>
而ANDROID端的,可以构造JSON,发送到webservice2.php
Java代码
12345678910111213141516171819202122
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发送的数据保存到服务端了 。