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'
,
$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);
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的更多相关文章
- 如何解析android访问webservice返回的SoapObject数据(可用)
怎么解析android访问webservice返回的SoapObject数据 本帖最后由 kkDragon123 于 2013-03-26 15:50:07 编辑 我的数据如下:mingdanResp ...
- (转)Android访问webservice
纠正网上乱传的android调用Webservice方法. 1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦 ...
- android访问webservice
// nameSpace 命名空间,methodName:方法名字:maps:参数集合:webserviceUrl:访问的webservice的网址:比如:http://17.18.199.100:8 ...
- 在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...
- Android访问中央气象台的天气预报API得到天气数据
最新说明:该接口已失效! 2014-03-04 可申请它公布的API,需申请:http://smart.weather.com.cn/wzfw/smart/weatherapi.shtml 在用A ...
- Android访问WCF服务
原文链接:http://www.cnblogs.com/VinC/archive/2011/02/24/1964049.html 本章目的: 用Wcf建立可以上Android可以访问的数据服务, 数据 ...
- android之调用webservice 实现图片上传
转:http://www.cnblogs.com/top5/archive/2012/02/16/2354517.html public void testUpload(){ try{ String ...
- 在Android中使用Android Ksoap2调用WebService
一.WebService介绍 WebService是基于SOAP协议可实现web服务器与web服务器之间的通信,因采用SOAP协议传送XML数据具有平台无关性,也是成为解决异构平台之间通信的重要解决方 ...
- Android访问远程网页取回json数据
php代码 $array = array( 'username'=>'杨铸', 'password'=>'123456', 'user_id'=>);echo json_enc ...
随机推荐
- UML类图符号 各种关系说明以及举例(转载)
文章出处:http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述对象和类之间相互关系的方式包括:依赖(Dependen ...
- 28个Java常用的工具类
源码下载:http://pan.baidu.com/s/1pJLSczD Base64.javaBase64DecodingException.javaCConst.javaCharTools.jav ...
- Create a DAC from a microcontroller's ADC
Few microcontrollers include a DAC. Although you can easily find an inexpensive DAC to control from ...
- nodejs之处理GET请求
一个简单的httpserver.接收get请求,并返回解析之后的数据. 以下是服务的代码: var http = require("http"); var url = requir ...
- 11.2 为什么要使用 MVC
以前的大部分应用程序(非Android应用)都是用像ASP.PHP或者CFML这样的过程化(自PHP5.0版本后已全面支持面向对象模型)语言来创建的.它们将像数据库查询语句这样的数据层代码和像HTML ...
- 如何修改容器内的/etc/resolv.conf
源由不表,暂且略过. 直接说workaround. 因为openshift的模式,/etc/resolv.conf是在pod生成的时候插入的,写入的是宿主机的ip作为dns的寻址,如果需要修改的化,需 ...
- iOS: 如何获取ios设备的当前IP地址
有的时候,我们项目上线后,需要根据ip地址去统计不同地区的用户情况,此时IP地址的收取显得尤其重要,一般情况下,在用户登录时去获取用户的ip是准确的,当然实时追踪ip的变化而统计是更安全可靠的. ip ...
- iOS: 偏好设置的详解和使用
偏好设置的详解: 用途:主要用来存储用户系统的设备信息,但有的时候也可以在程序的任何地方用来存储数据,作为全局数据来访问,例如视图切换需要进行登录时. 偏好设置的写入: •很多iOS应用都支持偏好设置 ...
- 高性能WEB开发:DOM编程
我们知道,DOM是用于操作XML和HTML文档的应用程序接口,用脚本进行DOM操作的代价很昂贵.有个贴切的比喻,把DOM和Javascript(这里指ECMscript)各自想象为一个岛屿,它们之间用 ...
- MapReduce API 基本概念
在正式分析新旧 API 之前, 先要介绍几个基本概念. 这些概念贯穿于所有 API 之中,因此, 有必要单独讲解. 1.序列化 序列化是指将结构化对象转为字节流以便于通过网络进行传输或写入持久存储的过 ...