經過KSoap三方插件解析WebService接口方法

話很少說,正文以下:java

1.在lib中放入ksoap2的jar包並導入android

2.在xml 配置文件中加入:web

<!-- 訪問網絡的權限 -->  
    <uses-permission android:name="android.permission.INTERNET" /> 

 

3.接下來就要經過代碼調用藉口了服務器

//返回結果字符串是一個xml格式的,即對應的soap響應結果
private void getData() throws JSONException {
// 命名空間
String serviceNameSpace = 「字符型」;
// 請求URL
String serviceURL = 「字符型URL地址」;
// 調用的方法
String methodName = 「調用的NameMethod";
String soapAction = serviceNameSpace + methodName;//命名空間+調用方法
// 實例化序列化的Envelop
SoapObject request = new SoapObject(serviceNameSpace(命名空間), methodName(調用方法名));
// 得到序列化的Envelop
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);//VER12 序列號和後臺開發人員肯定是多少
envelope.bodyOut = request;//有參數就加上參數 沒有參數就不加了
// 設置是否調用的是dotNet開發的WebService
envelope.dotNet = true; //true是.net false是java
envelope.setOutputSoapObject(request);
// Android傳輸對象
HttpTransportSE transport = new HttpTransportSE(serviceURL);
transport.debug = true;
try {
transport.call(soapAction, envelope);
// 獲取返回的數據
Object object = envelope.getResponse();
result = String.valueOf(object);
} catch (IOException e) {
e.toString();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}

下面是我本身分裝的基於Ksoap工具類

/**
* @param url WebService服務器地址
* @param methodName WebService的調用方法名
* @param properties WebService的參數
*/
public String callwebService1POST(String url, final String methodName, HashMap<String, String> properties) {
// 實例化序列化的Envelop
SoapObject request = new SoapObject(Constant.NameSpace, methodName);
// 假設map是HashMap對象
// map中的key是String類型,value是Integer類型
String key , value;
if (properties != null) {
Iterator iter = properties.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
// 獲取key
key = (String) entry.getKey();
// 獲取value
value = (String) entry.getValue();
request.addProperty(key, value);
}
}
Log.e("測試-我就是看看數據:", request.toString());
// 得到序列化的Envelop
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER12);
envelope.bodyOut = request;
// 設置是否調用的是dotNet開發的WebService
envelope.dotNet = true; //true是.net false是java
envelope.setOutputSoapObject(request);
// Android傳輸對象
HttpTransportSE transport = new HttpTransportSE(url);
transport.debug = true;
try {
transport.call(Constant.NameSpace + methodName, envelope);
// 獲取返回的數據
Object object = envelope.getResponse();
String result = String.valueOf(object);
//Log.e("FactoryResult:", String.valueOf(object));
return result;
} catch (IOException e) {
e.toString();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return null;
}
在Activity中調用方法:
new Thread(new Runnable() {
@Override
public void run() {
webServiceUtils = new WebServiceUtils();
String result = webServiceUtils.callwebService1POST(WebService_url, MethodName, HashMap<String, String> properties)
try {
resoScanJSON(result);
} catch (JSONException e) {
e.printStackTrace();
}
}
}).start();
在這多說一嘴,就是必須在子線程中運行。
相關文章
相關標籤/搜索