package com.cjt_pc.vehicleregulatoryestimate.utils;import android.app.Activity;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.LinkedHashMap;/** * Created by cjt-pc on 2015/7/8. * Email:879309896@qq.com */public class SoapUtil implements SoapConfig {    public static SoapObject postSoapRequest(String method) {        return postSoapRequest(method, null);    }    public static SoapObject postSoapRequest(String method, LinkedHashMap<String, Object> properties) {        String nameSpace = NAMESPACE;        String url = getUrl(method);        String soapAction = getAction(method);        // 初始化传入参数soapObject        SoapObject soapObject = new SoapObject(nameSpace, method);        for (LinkedHashMap.Entry<String, Object> entry : properties.entrySet()) {            soapObject.addProperty(entry.getKey(), entry.getValue());        }        // 设置版本和指定信封envelope的数据soapObject        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);        envelope.bodyOut = soapObject;        envelope.dotNet = true;        // 采用webservice协议发送请求        HttpTransportSE transport = new HttpTransportSE(url);        transport.debug = true;        try {            transport.call(soapAction, envelope);        } catch (final Exception e) {            e.printStackTrace();        }        // 接受服务端返回的数据,取其child        SoapObject object = (SoapObject) ((SoapObject) envelope.bodyIn).getProperty(0);        return object == null ? null : object;    }    /** * 根据传回的方法名返回指定的url * * @param methodName 方法名 * @return 访问地址 */    private static String getUrl(String methodName) {        switch (methodName) {            case LOGININ_METHOD:                return URL_1;            case GET_RW_LIST_METHOD:                return URL_2;            case GET_HBBZ_METHOD:                return URL_1;            case GET_PP_METHOD:                return URL_2;            case GET_CXI_METHOD:                return URL_2;            case GET_CXING_METHOD:                return URL_2;            case GET_UPLOAD_IMG_METHOD:                return URL_3;            case UPLOAD_PHOTO_METHOD:                return URL_3;            case SAVE_PGRW_METHOD:                return URL_2;        }        return null;    }    /** * 根据传回的方法名返回指定的action * * @param methodName 方法名 * @return 访问action */    private static String getAction(String methodName) {        switch (methodName) {            case LOGININ_METHOD:                return LOGININ_ACTION;            case GET_RW_LIST_METHOD:                return GET_RW_LIST_ACTION;            case GET_HBBZ_METHOD:                return GET_HBBZ_ACTION;            case GET_PP_METHOD:                return GET_PP_ACTION;            case GET_CXI_METHOD:                return GET_CXI_ACTION;            case GET_CXING_METHOD:                return GET_CXING_ACTION;            case GET_UPLOAD_IMG_METHOD:                return GET_UPLOAD_IMG_ACTION;            case UPLOAD_PHOTO_METHOD:                return UPLOAD_PHOTO_ACTION;            case SAVE_PGRW_METHOD:                return SAVE_PGRW_ACTION;        }        return null;    }}

SoapConfig的代码我就不贴了,都是些地址配置,这个工具类有点通杀的感觉,那接下来就看看怎么用了。

public class LoginInTask extends AsyncTask<Void, Void, SoapObject> {        String account, pwd;        public LoginInTask(String account, String pwd) {            this.account = account;            this.pwd = pwd;        }        @Override        protected SoapObject doInBackground(Void... params) {            editor = preferences.edit();            editor.putString("account", account);            editor.apply();            LinkedHashMap<String, Object> properties = new LinkedHashMap<>();            properties.put("TrueName", account);            properties.put("Pwd", pwd);            return SoapUtil.postSoapRequest("LoginIn", properties);        }        @Override        protected void onPostExecute(SoapObject soapObject) {            if (soapObject.getPropertyCount() == 0) {                failedLogin();            } else {                // 登陆成功                succeedLogin();            }        }    }

为什么要用LinkedHashMap而不是HashMap?
貌似wcf传输要按照一定的顺序,否则不通!

为什么使用AsyncTask而不是手动开启线程?
这样模块化了代码,清晰易懂,并且与界面交互较为简单。

更多相关文章

  1. 如何提高android代码质量
  2. Android日志系统Logcat源代码简要分析
  3. Android 轻松实现语音识别的完整代码
  4. 10.Android之测试代码实现步骤

随机推荐

  1. 7.ProgressBar
  2. Android中的Button自定义点击效果实例代
  3. Android(安卓)禁止Edittext弹出系统软键
  4. Android(安卓)Theme详细
  5. android:screenOrientation属性
  6. android adb shell 命令大全
  7. 详解Android中的屏幕方向
  8. Android(安卓)API中文文档ImageView
  9. Android(安卓)API中文文档EditText
  10. Unity Android打包apk安装错误INSTALL_FA