phonegap3.4.x webservice插件开发实践-实现webservice调用
发布时间:2020-12-16 23:32:28 所属栏目:安全 来源:网络整理
导读:本文已经假设你已经安装好了phonegap3.4.x相关开发环境,并能成功添加phonegap的相关插件,如下图 1. 插件js文件准备,如下图 ???? ???? 建立一个空文件?? CallService.js。 2. 插件java文件准备 ??? ??? 建立一个空文件 WebService.java 3. 填写相关插件配
本文已经假设你已经安装好了phonegap3.4.x相关开发环境,并能成功添加phonegap的相关插件,如下图 1. 插件js文件准备,如下图 ???? ???? 建立一个空文件?? CallService.js。 2. 插件java文件准备 ??? ??? 建立一个空文件 WebService.java 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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |