Android開發之訪問WebService的工具類
阿新 • • 發佈:2018-11-26
Android中使用WebService通訊,下面對訪問WebService的工具類進行記錄
在Activity類中使用WebService對伺服器進行訪問package com.wjy.project.railway.tools; import android.os.Handler; import android.os.Message; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by WangJinyong on 2018/3/28. * 訪問WebService的工具類 */ public class WebServiceUtils { //伺服器地址 public static final String WEB_SERVER_URL = "http://114.115.205.183:9004/Compaction/"; // public static final String WEB_SERVER_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; // 名稱空間 private static final String NAMESPACE = "http://WebXml.com.cn/"; // 含有3個執行緒的執行緒池 private static final ExecutorService executorService = Executors.newFixedThreadPool(3); /** * @param url WebService伺服器地址 * @param methodName WebService的呼叫方法名 * @param properties WebService的引數 * @param webServiceCallBack 回撥介面 */ public static void callWebService(String url, final String methodName, HashMap<String, String> properties, final WebServiceCallBack webServiceCallBack) { // 建立HttpTransportSE物件,傳遞WebService伺服器地址 final HttpTransportSE httpTransportSE = new HttpTransportSE(url); // 建立SoapObject物件 SoapObject soapObject = new SoapObject(NAMESPACE, methodName); // SoapObject新增引數 if (properties != null) { for (Iterator<Map.Entry<String, String>> it = properties.entrySet() .iterator(); it.hasNext(); ) { Map.Entry<String, String> entry = it.next(); soapObject.addProperty(entry.getKey(), entry.getValue()); } } // 例項化SoapSerializationEnvelope,傳入WebService的SOAP協議的版本號 final SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); // 設定是否呼叫的是.Net開發的WebService soapEnvelope.setOutputSoapObject(soapObject); soapEnvelope.dotNet = true; httpTransportSE.debug = true; // 用於子執行緒與主執行緒通訊的Handler final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // 將返回值回撥到callBack的引數中 webServiceCallBack.callBack((SoapObject) msg.obj); } }; // 開啟執行緒去訪問WebService executorService.submit(new Runnable() { @Override public void run() { SoapObject resultSoapObject = null; try { httpTransportSE.call(NAMESPACE + methodName, soapEnvelope); if (soapEnvelope.getResponse() != null) { // 獲取伺服器響應返回的SoapObject resultSoapObject = (SoapObject) soapEnvelope.bodyIn; } } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } finally { // 將獲取的訊息利用Handler傳送到主執行緒 mHandler.sendMessage(mHandler.obtainMessage(0, resultSoapObject)); } } }); } /** * @author WangJinyong */ public interface WebServiceCallBack { public void callBack(SoapObject result); } }
private void requestZT_G_user() { //新增引數 HashMap<String, String> properties = new HashMap<String, String>(); properties.put("sjh", "13801234567"); properties.put("mac", hostmac); WebServiceUtils.callWebService("伺服器地址", "介面的方法名", properties, new WebServiceUtils.WebServiceCallBack() { @Override public void callBack(SoapObject result) { Log.e("tag","result="+result);//返回的資料 } }); }