public abstract class Callbacks<T> {
/**
* UI Thread
*/
public void onBefore(int id) {
}

/**
* UI Thread
*
* @param
*/
public void onAfter(int id) {
}

/**
* UI Thread
*
* @param progress
*/
public void inProgress(float progress, long total, int id) {

}

/**
* Thread Pool Thread
*
* @param response
*/
public abstract T parseNetworkResponse(String response, int id) throws Exception;

public abstract void pause(String response) throws Exception;

public abstract void onError(Exception e);

public abstract void onResponse(T response);


}
import android.os.StrictMode;


import org.apache.commons.lang3.StringUtils;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import cn.mvp.mlibs.utils.StringUtil;


public class CallWebService {

/*服务器测试站点*/
/*---------------------测试地址---------------------------------*/
public static final String ROOT_URL = "http://192.168.100.213:9293";
/*---------------------测试地址---------------------------------*/


/**
* 调用webService方法(该方法不再推荐使用,建议使用返回json格式的请求方法)
*
* @param map 参数:key:参数的名称;value:参数的值
* @param methodName 方法名
* @return 返回jsonObjict对象格式的数据
*/
public static String callMethod(Map<String, String> map, String methodName) throws IOException, XmlPullParserException {
/*
* 解决android.os.NetworkOnMainThreadException异常
*/
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().
detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().
penaltyLog().penaltyDeath().build());
// 命名空间
String nameSpace = "http://tempuri.org/";
// SOAPAction :命名空间+方法名
String soapAction = "http://tempuri.org/" + methodName;

// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(nameSpace, methodName);
// 此处2个PropertyInfo,是methodName方法所需的参数
for (Map.Entry<String, String> entry : map.entrySet()) {
rpc.addProperty(entry.getKey(), entry.getValue());
}
// SoapHeader在这里
Element[] header = new Element[1];
header[0] = new Element().createElement(nameSpace, "MySoapHeader");

Element username = new Element().createElement(nameSpace, "username");
username.addChild(Node.TEXT, "userName");
header[0].addChild(Node.ELEMENT, username);
Element pass = new Element().createElement(nameSpace, "password");
pass.addChild(Node.TEXT, "234234122");
header[0].addChild(Node.ELEMENT, pass);
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.headerOut = header;
envelope.bodyOut = rpc;
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
HttpTransportSE ht = new HttpTransportSE(ROOT_URL + "/WebService.asmx", 60000);
// 此处如果用SoapObject会报错
ht.call(soapAction, envelope);
SoapPrimitive detail = (SoapPrimitive) envelope.getResponse();
return detail.toString();
}

public static void get(String method, HashMap<String, String> args, ResultCallbacks<?> callBack) {
try {
String responseData = callMethod(args, method);
callBack.pause(responseData);
} catch (Exception e) {
callBack.onError(e);
}
}

}
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;

/**
* 返回数据解析类
*/
public abstract class ResultCallbacks<T> extends Callbacks<ResultData<T>> {
@Override
public ResultData<T> parseNetworkResponse(String response, int id) throws Exception {
ResultData<T> tResultData = JSONObject.parseObject(response, new TypeReference<ResultData<T>>() {
});
onResponse(tResultData);
return tResultData;
}

@Override
public void pause(String data) {
onResponse(JSONObject.parseObject(data, new TypeReference<ResultData<T>>() {
}));
}
}

前人栽树后人乘凉,愿世界和平