博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android访问php webservice
阅读量:6152 次
发布时间:2019-06-21

本文共 4377 字,大约阅读时间需要 14 分钟。

如果是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 = 
""
;
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端发送的数据保存到服务端了。

转载于:https://www.cnblogs.com/xiaochao1234/p/3666340.html

你可能感兴趣的文章
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
js时间和时间戳之间如何转换(汇总)
查看>>
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>