Andorid访问WebService的学习笔记
最近学习了Android怎么访问WebService。把过程记录一下
1.设置模拟器可以上网
Windows下,配置好Adroid环境变量后(如将d:\android-sdk-windows-1.0_r1\tools加入系统变量PATH),在命令行窗口输入:
emulator
启动Android 模拟器后, 输入:
adb shell
进入adb shell模式:
将网络连接代理设置写入配置数据库,假如你的上网代理IP是10.193.xx.xx:
sqlite3
/data/data/com.android.providers.settings/databases/settings.db "INSERT
INTO system VALUES(99,'http_proxy','10.193.xx.xx:1080')"
查询一下是否成功更改了系统设置:
sqlite3
/data/data/com.android.providers.settings/databases/settings.db "SELECT *
FROM system"
注意的几点,设置后如果上不了网可以看下DNS是否设置正确
getprop看下NET.DNS1对不对,设成和PC一样就OK了
设置方法 setprop NET.DNS1 xxx.xxx.xxx.xxx 具体值看你自己PC
2.发布WebSerice(我是通过axis2在TOMCAT加了一个简单的数字加减的服务)
1.下载axis2的war文件,扔到Tomcat Webapps
2.写Service类
package rong.service;
/** */
/**
* 计算器运算
*
* @author rongxinhua
*
*/
public class CalculateService {
/** */
/**
* 加法运算
*
* @param x
* 被加数
* @param y
* 加数
* @return x与y的和
*/
public float plus(float x, float y) {
return x + y;
}
/** */
/**
* 减法运算
*
* @param x
* 被减数
* @param y
* 减数
* @return x与y之差
*/
public float minus(float x, float y) {
return x - y;
}
/** */
/**
* 乘法运算
*
* @param x
* 被乘数
* @param y
* 乘数
* @return x与y的乘积
*/
public float multiply(float x, float y) {
return x * y;
}
/** */
/**
* 除法运算
*
* @param x
* 被除数
* @param y
* 除数
* @return x与y的商
*/
public float divide(float x, float y) {
return x / y;
}
}
3.打包服务arr文件,扔到axis2的WEB-INF\service\下
比如:(E:\J2EE\tomcat6\webapps\axis2\WEB-INF\services\CalculateService.aar)
4.Android方面,写个界面,简单的需要一个TextView就需要显示WebService返回的值
package com.suncsdn;
import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Hello extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView t = (TextView) findViewById(R.id.text1);
String msg = getServiceStr();
t.setText(msg==null?"无值返回":msg);
}
private String getServiceStr() {
// WebService的命名空间
String namespace = "http://service.rong";
// 服务器发布的地址
String url = "http://192.168.1.121:8080/axis2/services/CalculateService";
// 函数名
String methodName = "plus";
//返回值
String xmlMessage = null;
try {
// 创建HttpTransportSE对象,通过HttpTransportSE类的构造方法可以指定WebService的url
HttpTransportSE transport = new HttpTransportSE(url);
transport.debug = true;
// 指定WebService的命名空间和函数名
SoapObject soapObject = new SoapObject(namespace, methodName);
// 设置调用方法参数的值
soapObject.addProperty("x", 1);
soapObject.addProperty("y", 1);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER10);
envelope.bodyOut = transport;
envelope.setOutputSoapObject(soapObject);
// 使用call方法调用WebService方法
transport.call(null, envelope);
SoapObject sb = (SoapObject)envelope.bodyIn;
// 获取从服务器端返回的XML字符串
xmlMessage = sb.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return xmlMessage;
}
}
为了方便直接把AAR文件作为附加带上了