Android本身是不提供soap访问webservice的功能,引用了ksoap2-android的jar实现了访问webservice的方法。代码如下:


static final int ACTIVITY_REQUEST_CODE_A = 100;

String TAG = "Response";

Object resultRequestSOAP = null;

static UZModuleContext moduleContext;

private static UZModuleContext mJsCallback;

//设置命名空间、访问地址、方法名    

String SOAP_ACTION;    

String METHOD_NAME;    

String NAMESPACE;    

String URL;

String Propert;

public carapi(UZWebView webView) {

super(webView);

}

@SuppressWarnings("unused")

@UzJavascriptMethodpublic void jsmethod_QueryPassport(final UZModuleContext moduleContext){

this.moduleContext = moduleContext;

SOAP_ACTION = moduleContext.optString("SOAP_ACTION");

METHOD_NAME = moduleContext.optString("METHOD_NAME");

NAMESPACE = moduleContext.optString("NAMESPACE");

URL = moduleContext.optString("URL");

Propert = moduleContext.optString("Propert");

if("".equals(SOAP_ACTION) || "".equals(METHOD_NAME) || "".equals(NAMESPACE) || "".equals(URL) || "".equals(Propert)){

try {

    JSONObject ret = new JSONObject();

    ret.put("data", "400");

    moduleContext.success(ret, true);

    } catch (JSONException e) {

    e.printStackTrace();

    }

}else{

//异步任务执行Webservice请求     

 AsyncCallWS task = new AsyncCallWS();    

  task.execute();

}

private class AsyncCallWS extends AsyncTask{

@Override

protected void onPreExecute() {

Log.i(TAG, "onPreExecute");

}

@Override

protected Void doInBackground(Void... params) {

Log.i(TAG, "doInBackground");

calculate();

return null;

}

@Override

protected void onPostExecute(Void result) {

Log.i(TAG, "onPostExecute");

}

}

public void calculate() {

try {

//             创建soapObject,即拼装soap bodyin

try{

JSONObject propertobj = new JSONObject(Propert);

Iterator it = propertobj.keys();

while(it.hasNext()){//遍历JSONObject

String keyname = it.next().toString();

String keyvalue = propertobj.getString(keyname);

Request.addProperty(keyname,keyvalue);

}

}catch(JSONException e){

System.out.println(e.toString());

}

//             创建soap 数据

SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);

soapEnvelope.dotNet = true;

soapEnvelope.setOutputSoapObject(Request);

HttpTransportSE transport = new HttpTransportSE(URL);

//           soap 协议发送

transport.call(SOAP_ACTION, soapEnvelope);

//             soap 请求完成后返回数据并转换成字符串

resultRequestSOAP = (Object) soapEnvelope.getResponse();

Log.i(TAG, "Result: " + resultRequestSOAP);

try {

JSONObject ret = new JSONObject();

ret.put("data", resultRequestSOAP);

moduleContext.success(ret, true);

} catch (JSONException e) {

e.printStackTrace();

}

} catch (Exception ex) {

Log.e(TAG, "Error: " + ex.getMessage());

}

}

更多相关文章

  1. Android手机客户端通过JSP实现与Tomcat服务器端通信(Msql数据库,Js
  2. Android中解析Json方法
  3. android开发数据储存的路径示例
  4. android 将Json数据动态的添加到String[]数组当中
  5. 郭霖的LitePal版本历程
  6. registerContentObserver回调两次,ContentObserver回调两次
  7. Android(安卓)使用 URL 和 AsyncTask 加载网络数据

随机推荐

  1. android button 自定义
  2. android的TextUtils.substring与.net的不
  3. Android(安卓)9.0及以上WebView无法打开
  4. Android(安卓)O版本Call对象解析
  5. android-控件样式(Theme)自定义
  6. Android(安卓)adb 命令
  7. Android(安卓)自定义键盘中禁用点击预览
  8. Android(安卓)中比 Timer 更好方法
  9. xUtils3.3.x注解使用实例
  10. cmd>>android