Android:服务器访问WebService的使用

转自:http://blog.csdn.net/gf771115/article/details/8199638

 

首先解释一下WebServiceWebService是一种基于SOAP协议的远程调用标准。通过WebService可以将不同操作系统平台,不同语言、不同技术整合到一起。详细见:http://baike.baidu.com/view/837392.htm#sub837392

Android中访问WebService总结有两种:

1、通过链接 2、通过第三方类库

先说说第一种:

比较简单贴代码了:

final String SERVER_URL = "http://192.168.1.55/PosWebServices/WebUI.asmx"; // 定义需要获取的内容来源地址
URL url = new URL(SERVER_URL);
URLConnection con = url.openConnection(); 
//一些请求设置
con.setDoOutput(true);
con.setRequestProperty("Pragma:", "no-cache"); 
con.setRequestProperty("Cache-Control", "no-cache");
con.setRequestProperty("Content-Type", "text/xml");

OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
out.write(new String(xmlInfo.getBytes("UTF-8"))); //这里可以发参数的,字符串应该是XML格式的
out.flush();
out.close();
// 取返回值
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder sBuilder = new StringBuilder();
String line = "";
for (line = br.readLine(); line != null; line = br.readLine()) {
	sBuilder.append(line);
}
// 解析XML
Pattern patternname = Pattern.compile("<Name>.*?</Name>");
Matcher matchername = patternname.matcher(sBuilder.toString());
if (matchername.find()) {
	String name = matchername.group();
	TextView lblname = (TextView) findViewById(R.id.lbl_name);
	lblname.setText(URLDecoder.decode(name.substring(name.indexOf(">") + 1, name.lastIndexOf("<"))));
}

Pattern patternage = Pattern.compile("<Age>.*?</Age>");
Matcher matcherage = patternage.matcher(sBuilder.toString());
if (matcherage.find()) {
	String age = matcherage.group();
	TextView lblage = (TextView) findViewById(R.id.lbl_age);
	lblage.setText(age.substring(age.indexOf(">") + 1, age.lastIndexOf("<")));
}

} catch (Exception e) {
	String str = e.getMessage();
}

很简单不多说了还可以用HttpPostHttpResponse的方式。

第二种:

需要下载一个第三方Jar包:ksoap2

下载地址:http://ksoap2-android.googlecode.com/svn-history/r575/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar

相比旧版本增强了网络链接等等同时用HttpTransportSE 替代了AndroidHttpTransport ,建议用新版本

下载后导入工程,不多解释了

1. 指定WebService的命名空间和调用的方法名,代码如下:

SoapObject request = new SoapObject("http://service", "getName");

2. 设置调用方法的参数值,如果方法没有参数,可以省略这一步。设置方法的参数值的代码如下:

request.addProperty("m1", "v1");

request.addProperty("m2", "v2");

3. 生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码如下: SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); envelope.bodyOut = request; 如果是.NETWebService还需加:

4. 创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebServiceWSDL文档的URL,代码如下:

HttpTransportSE ht = new HttpTransportSE("http://192.168.1.55/PosWebServices/WebUI.asmx?wsdl");

HttpTransportSE.dotNet=true;

5. 使用call方法调用WebService方法,代码如下: ht.call(null, envelope); call方法的第1个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。 6. 使用getResponse方法获得WebService方法的返回结果,代码如下: SoapObject soapObject = (SoapObject) envelope.getResponse();

7.取值

soapObject.getProperty("这个名字你懂的");


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值