ksoap2的简单封装


今天学习了一下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);
   }

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值