本文已经假设你已经安装好了phonegap3.4.x相关开发环境,并能成功添加phonegap的相关插件,如下图
3. 填写相关插件配置
在 cordova_plugins.js 文件中加入以下内容,该文件在安装phonegap 3.4.x时会自动生成,在安装网上插件后,会有相关插件内容填入,如下图
注意红色字的说明部分。
res/xml/config.xml 中加入
<feature name="CallService"> <param name="android-package" value="com.bl.cordova.service.WebService" /> </feature>
4. 分别填充以上的 CallService.js 和 WebService.java 两个文件,代码内容分别如下
WebService.java
package com.bl.cordova.service; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaPlugin; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class WebService extends CordovaPlugin{ public static final String ACTION_NAME = "callService"; public static String NAMESPACE = "http://tempuri.org/"; /** * @param action callService * @param args [{'url':'值','namespace':'命名空间'},{'params':'值'}] * */ @Override public boolean execute(String action,JSONArray args,CallbackContext callbackContext) throws JSONException { // Todo Auto-generated method stub boolean pass = true; System.out.println("调用了"+action); if(action.equals(ACTION_NAME)){ JSONObject arg_object = args.getJSONObject(0); String url = arg_object.getString("url"); String namespace = arg_object.getString("namespace"); if(namespace!=null&&!namespace.equals("")){ NAMESPACE = namespace; } String method = arg_object.getString("method"); String donet = arg_object.getString("donet"); //取得参数,放在第二个参数 JSONObject params_object = args.getJSONObject(1); ServiceHelp serviceHelp = ServiceHelp.getInstance(); String result = serviceHelp.callService(url,NAMESPACE,method,params_object,donet); if(result!=null&&!result.equals("")){ callbackContext.success(result); }else{ pass = false; callbackContext.error("调用出错!"); } } return pass; } }
CallService.js
cordova.define("com.bl.cordova.service.WebService",function(require,exports,module) { var exec = require('cordova/exec'),cordova = require('cordova'),channel = require('cordova/channel'),utils = require('cordova/utils'); var me = new WebService(); function WebService() { this.type = 'webservice'; } WebService.prototype.callService = function(params,successCallback,errorCallback) { /*** * {'url':'','method':'','params':{}} * */ exec(successCallback,errorCallback,"CallService","callService",params); }; module.exports = me; });
5.页面调用方法
var params = [{'url':'http://10.194.158.54:8080/axis_service/services/jsonservice?wsdl','method':'jsonParams','namespace':'http://services.bl.com','donet':''},{'name':{"nl":"20","xb":"男","address":"南宁"}}]; navigator.service.callService(params,function(result){ alert(result); },function(e){ alert('调用出错'+e.code);});调用结果如图
6.有网友反映,少写了一个类ServiceHelp.java,现在补上
package com.bl.cordova.service; import java.util.Iterator; import org.json.JSONObject; import org.ksoap2.soapEnvelope; import org.ksoap2.serialization.soapObject; import org.ksoap2.serialization.soapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; public class ServiceHelp { private String method; //调用的方法 private String namespace; //命名空间 private String url; //服务的url private static ServiceHelp serviceHelp; public static ServiceHelp getInstance(){ if(serviceHelp==null){ serviceHelp = new ServiceHelp(); } return serviceHelp; } /** * 执行 webservice * * */ public String callService(String url,String namespace,String method,JSONObject params,String donet){ boolean net = false; if(donet!=null&&donet.equals("true")){ net = true; } String resultJson = ""; try { SoapObject rpc = new SoapObject(namespace,method); if(params!=null){ Iterator it = params.keys(); while(it.hasNext()){ String key = String.valueOf(it.next()); String value = String.valueOf(params.getString(key)).replaceAll("null",""); rpc.addProperty(key,value); } } HttpTransportSE ht = new HttpTransportSE(url); // ht.debug = true; SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; envelope.dotNet = net; envelope.setoutputSoapObject(rpc); ht.call(null,envelope); Object result = (Object)envelope.getResponse(); if(result!=null) resultJson = result.toString(); } catch (Exception e) { e.printstacktrace(); } finally{ } return resultJson; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。