今天学习了一下ksoap,做了一下简单的封装。
package com.demo.wang.netksoap;
import android.util.Log;
import com.demo.wang.R;
import org.ksoap2.HeaderProperty;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class KSoap2Utility {
private String TAG = "KSoap2Utility";
// Webservice服务器地址
private final String SERVER_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx";
// 调用的webservice命令空间
private final String NAMESPACE = "http://WebXml.com.cn/";
private HeaderProperty mSessionHeader = null;
private ExecutorService threadPool = Executors.newCachedThreadPool();
private static KSoap2Utility networkService;
public static KSoap2Utility getNetworkService()
{
if(networkService == null){
networkService = new KSoap2Utility();
}
return networkService;
}
public void doTransaction(final String Method_name,final Map<String,Object> values,
final ICallback callback){
threadPool.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
String SOAP_ACTION = NAMESPACE+Method_name;
try{
SoapObject request = new SoapObject(NAMESPACE, Method_name);
if(values != null){
Iterator iter = values.entrySet().iterator();
while(iter.hasNext()){
Map.Entry entry = (Map.Entry) iter.next();
request.addProperty(entry.getKey().toString(),entry.getValue());
Log.i(TAG, entry.getKey().toString()+">>>"+entry.getValue());
}
}
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.bodyOut = request;
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
LinkedList<HeaderProperty> reqHeaders = new LinkedList<HeaderProperty>();
if(mSessionHeader != null){
reqHeaders.add(new HeaderProperty("Cookie",mSessionHeader.getValue()));
}
HttpTransportSE transport = new HttpTransportSE(SERVER_URL,3000);
List<HeaderProperty> respHeaders = transport.call(SOAP_ACTION, soapEnvelope,
reqHeaders );
for(HeaderProperty hp:respHeaders){
if(hp != null &&hp.getKey()!=null&&hp.getKey().equalsIgnoreCase("set-cookie")){
mSessionHeader = hp;
break;
}
}
Object resultString = soapEnvelope.getResponse();
Log.i(TAG, "Result: "+resultString.toString());
callback.onResponse(200,resultString.toString());
}catch(Exception ex){
callback.onResponse(R.id.http_error,ex.getMessage().toString());
}
}
});
}
public void doTransaction(String Method_name,IJsonParser parser){
doTransaction(Method_name,null,parser);
}
public void doTransaction(String Method_name,Map<String,Object> values,final IJsonParser parser) {
doTransaction(Method_name,values, new ICallback() {
public void onResponse(int i, String s1) {
if (200 == i)
parser.parse(s1);
else
parser.onError(i, s1);
}
});
}
public interface ICallback {
public abstract void onResponse(int respCode, String result);
}
public interface IJsonParser
{
public abstract void onError(int i, String s);
public abstract void parse(String s);
}
}