Android访问WebService的两种方法
首先解释一下WebService:WebService是一种基于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(); }
很简单 不多说了 还可以用HttpPost加HttpResponse的方式。
第二种:
需要下载一个第三方Jar包:ksoap2
相比旧版本增强了网络链接等等同时用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; 如果是.NET的WebService还需加:
4. 创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的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("这个名字你懂的");
Android访问WebService的两种方法的更多相关文章
- Android 抗锯齿的两种方法
Android 抗锯齿的两种方法 (其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true)) 在Android中,目前,我知道有两种出现锯齿 ...
- android emulator启动的两种方法详解
android emulator启动的两种方法详解 转https://blog.csdn.net/TTS_Kevin/article/details/7452237 对于android学习者,模 ...
- android使用全局变量的两种方法
在我们使用android编写程序的时候,少不了想利用全局变量,但是面向对象语言和过程语言区别很大,不再是include就可以的.这里我写了使用全局变量的两种方法: 1.使用applicati ...
- [转]android使用全局变量的两种方法
本文转自:http://blog.csdn.net/feiyangxiaomi/article/details/9966215 在我们使用android编写程序的时候,少不了想利用全局变量,但是面向对 ...
- Phonegap通过JS访问本地接口的两种方法
Phonegap为跨设备的应用开发提供了一个解决方案.如果某个应用只有js和html,则可以通过Phonegap的在线build工具,编译出多个平台的app安装包.当然通过Phonegap提供的js可 ...
- (转)Android创建桌面快捷方式两种方法
[IT168技术]Android在桌面上生成快捷方式有两种情况,一种是直接在桌面直接生成;一种是长按桌面,在弹出的快捷菜单中生成. 谈谈在桌面上直接生成.个人觉得这个比较爽快,既然都是快捷方式了干嘛还 ...
- Android apk签名的两种方法
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 为了保证 ...
- android 实现分享功能两种方法
当我想做一个智能的记事本的时候,我就在尝试自己写一组分享功能.后来才知道,原来每个社交软件中都有自己的分享接口. 这就大大减少了我们的代码量了. 第一种方法:特点--简单 package com.ex ...
- 解决android 大图OOM的两种方法
最近做程序中,需要用到一张大图.这张图片是2880*2180大小的,在我开发所用的华为3C手机上显示没有问题,但是给米3装的时候,一打开马上报OOM错误.给nexus5装,则是图片无法出来,DDMS中 ...
随机推荐
- 【原创】回溯线搜索 Backtracking line search
机器学习中很多数值优化算法都会用到线搜索(line search).线搜索的目的是在搜索方向上找到是目标函数\(f(x)\)最小的点.然而,精确找到最小点比较耗时,由于搜索方向本来就是近似,所以用较小 ...
- 【字符串处理】HDOJ-1020-Encoding
[题目链接:HDOJ-1020] 相邻字符,两两比较. #include<cstdio> #include<cstring> ; char sr[MAXN]; int main ...
- 【轻院热身赛】级数求和、进制转换、candy
[题目链接:级数求和] Problem A: 级数求和 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 409 Solved: 240 SubmitSt ...
- Android Failure [INSTALL_FAILED_OLDER_SDK]
今天编译工程发现 提示“ Failure [INSTALL_FAILED_OLDER_SDK]” 最后发现最小minSdkVersion 超过当前机器的版本,修改配置表中的minSdkVersion, ...
- Android-判断当前网络是否可用
1.声明权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 2. ...
- linux下网络排错与查看
基本的故障排除错误 故障的排除一定是先简单后复杂的,有的人把上述的文件反复配置,就是上不了网,一直都认为是系统出了故障,想重装机子.结果发现原来是网线压根就没插上. 排错要慢慢的按部就班的来: (1) ...
- java中判断是否为中文
public boolean isChinese(String strName) { char[] ch = strName.toCharArray(); for (int i = 0; i < ...
- mybatis Mapper XML 文件
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
- 《Python 学习手册4th》 第十八章 参数
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- C++类与对象
[1]类的内存问题 类是抽象的,不占用内存,而对象是具体的,占用 存储空间.在一开始时弄清对象和类的关系是十分 重要的.[2]类的声明 如果在类的定义中既不指定private也不指定public,则系 ...