Android访问WebService的两种方法

首先解释一下WebService:WebService是一种基于SOAP协议的远程调用标准。经过WebService能够将不一样操做系统平台,不一样语言、不一样技术整合到一块儿。详细见:http://baike.baidu.com/view/837392.htm#sub837392android

Android中访问WebService总结有两种:一、经过连接 二、经过第三方类库网络

先说说第一种:app

比较简单贴代码了:svn

final String SERVER_URL = "http://192.168.1.55/PosWebServices/WebUI.asmx"; // 定义须要获取的内容来源地址 URL url = new URL(SERVER_URL); URLConnection con = url.openConnection();ui

//一些请求设置 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());google

out.write(new String(xmlInfo.getBytes("UTF-8"))); //这里能够发参数的,字符串应该是XML格式的 out.flush(); out.close();url

 

// 取返回值操作系统

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(); }code

很简单 很少说了 还能够用HttpPost加HttpResponse的方式。xml

第二种:

须要下载一个第三方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; 若是是.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("这个名字你懂的");

相关文章
相关标签/搜索