Android基于SOAP协议向WebService交互数据,修改请求超时时间
SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议。
通过第三方提供的架包ksoap2-Android-assembly-2.4-jar-with-dependencies.jar,我们可以向服务器进行请求调用自己需要的服务。下面以http://www.webxml.com.cn/提供的天气预报web服务为例。
下面是向远处服务器进行请求的详细操作类WebServiceUtil
复制到剪贴板 Java代码
public class WebServiceUtil {
//命名空间
private static final String NAMESPACE = "http://WebXml.com.cn/";
//WebService地址
private static final String URL = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
//需要调用的方法名
private static final String getSupportProvince = "getSupportProvince";
/**
* @desc 获得洲、国内外省份和城市信息
* @return 省份列表
*/
public List getAllProvince() {
List allProvince = new ArrayList();
try {
//1.实例化SoapObject对象
SoapObject request = new SoapObject(NAMESPACE, getSupportProvince);
//2.如果方法需要参数,设置参数
// request.setProperty("参数名称", "参数值");
//3.设置Soap的请求信息,参数部分为Soap协议的版本号
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
//4.构建传输对象
AndroidHttpTransport transport = new AndroidHttpTransport(URL);
transport.debug = true;
//5.访问WebService,第一个参数为命名空间 + 方法名,第二个参数为Envelope对象
transport.call(NAMESPACE + getSupportProvince, envelope);
//6.解析返回的数据
SoapObject result = (SoapObject) envelope.getResponse();
int count = result.getPropertyCount();
for (int i = 0; i < count; i++) {
allProvince.add(result.getProperty(i).toString());
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return allProvince;
}
}
使用还是比较简单的,在这我只以天气预报服务中提供的获取省份信息的方法getSupportProvince为例,详细的解释了基于soap协议的访问操作。
在访问远程服务器提供的服务时,有时会因为网络问题或者是服务器端问题,而导致客户端侧一直处于请求连接状态,此时我们希望可以控制请求得不到响应的超时时间TimeOut.
想要控制请求的超时时间,我们需要根据ksoap2-android-assembly-2.4-jar-with-dependencies.jar包,修改一些访问的控制类。
1.首先重写架包中的ServiceConnectionSE.Java,添加设置超时时间的方法,可以在你的工程里重写这个类
复制到剪贴板 Java代码
package com.ahutzh.weather;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.ksoap2.transport.ServiceConnection;
public class ServiceConnectionSE
implements ServiceConnection
{
private HttpURLConnection connection;
public ServiceConnectionSE(String url)
throws IOException
{
this.connection = ((HttpURLConnection)new URL(url).openConnection());
this.connection.setUseCaches(false);
this.connection.setDoOutput(true);
this.connection.setDoInput(true);
}
public void connect() throws IOException {
this.connection.connect();
}
public void disconnect() {
this.connection.disconnect();
}
public void setRequestProperty(String string, String soapAction) {
this.connection.setRequestProperty(string, soapAction);
}
public void setRequestMethod(String requestMethod) throws IOException {
this.connection.setRequestMethod(requestMethod);
}
public OutputStream openOutputStream() throws IOException {
return this.connection.getOutputStream();
}
public InputStream openInputStream() throws IOException {
return this.connection.getInputStream();
}
public InputStream getErrorStream() { 
补充:移动开发 , Android ,