2015-01-30 21:36:50|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:Android, Java, 移动应用|来源:唯设编程网
下面,我们实现一个通用的功能类KSoap2Utility,下面是这个类的实现代码:
package utility; import android.content.res.Resources; import android.os.Handler; import android.os.Message; import android.util.Log; import com.example.ygh.vcsosapplication.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; /** * KSoar2工具类,实现WebService的访问 * Created by ygh on 2015/1/27. */ public class KSoap2Utility { private static HeaderProperty mSessionHeader = null; /*** * 请求WebService * @param URL * @param METHOD_NAME * @param values * @param handler */ public static void doTransaction(final String URL, final String METHOD_NAME, final Map<String, Object> values, final Resources r, final Handler handler) { final String TAG ="Vik"; new Thread(new Runnable() { @Override public void run() { String NAMESPACE = r.getString(R.string.web_service_namespace); String SOAP_ACTION = NAMESPACE + METHOD_NAME; try { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 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); //处理cookie,保存session // Build request header LinkedList<HeaderProperty> reqHeaders = new LinkedList<HeaderProperty>(); if (mSessionHeader != null) { reqHeaders.add(new HeaderProperty("Cookie", mSessionHeader.getValue())); //using the session id from last header } HttpTransportSE transport = new HttpTransportSE(r.getString(R.string.host)+URL,3000); List<HeaderProperty> respHeaders = transport.call(SOAP_ACTION, soapEnvelope,reqHeaders); // See note after code 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()); //处理消息 Message message = handler.obtainMessage(); message.obj = resultString; handler.sendMessage(message); } catch (Exception ex) { ex.printStackTrace(); Log.e(TAG, "Error: " + ex.getMessage()); } } }).start(); } }