Android通过WebService访问服务器
WebService是一种基于SOAP协议的远程调用标准。通过WebService可以将不同操作系统平台,不同语言,不同技术整合到一起。在AndroidSDK中并没有提供调用WebService的库,因此,需要使用第三方SDK来调WebService。
本例使用了比较常用的KSOAP2,可以从如下地址下载Android版的KSOAP2 :
http://code.google.com/ksoap2—android/downloads/list
package com.ztt.spm.net;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.MarshalBase64;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.util.Log;
import com.ztt.spm.utils.SUtil;
/**
* 手机端调用服务器端WebService接口*
*/
public class CommonWebService {
/**
* 向服务器传实体的接口函数
* @param bean 传入的参数对象
* @param NAMESPACE 名称空间
* @param METHOD_NAME 调用的方法名
* @param URL WSDL文档的URL
* @return 返回对象
*/
public static Object net(Object bean,String NAMESPACE,String METHOD_NAME,String URL){
Object result = null;
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("MyIN", SUtil.serialize(bean));//这里传入参数对象,如果需要传入多个就多拷贝几行
//建立网络连接
AndroidHttpTransport ht = new AndroidHttpTransport(URL);
ht.debug = true;
//创建SoapSerializationEnvelope对象,并指定WebService的版本
envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = request;
//调用WebService
ht.call(null, envelope);
//这种也可以,但方法已过时,最好不要用
if(envelope.getResult()!=null){//判断是否返回结果
result = envelope.getResult();
}
// 使用getResponse方法获得WebService方法的返回结果
// if(envelope.getResponse()!=null){
// SoapObject response = (SoapObject) envelope.getResponse();
// result = response.getProperty("MyOut");
// }
} catch (Exception e) {
e.printStackTrace();
Log.i("tag", "exception:"+e);
}
return result;
}
}