phonegap3.4.x webservice插件开发实践-实现webservice调用
2014-06-18 14:36
399 查看
本文已经假设你已经安装好了phonegap3.4.x相关开发环境,并能成功添加phonegap的相关插件,如下图
1. 插件js文件准备,如下图
建立一个空文件 CallService.js。
2. 插件java文件准备
建立一个空文件 WebService.java
3. 填写相关插件配置
在 cordova_plugins.js 文件中加入以下内容,该文件在安装phonegap 3.4.x时会自动生成,在安装网上插件后,会有相关插件内容填入,如下图
注意红色字的说明部分。
res/xml/config.xml 中加入
4. 分别填充以上的 CallService.js 和 WebService.java 两个文件,代码内容分别如下
WebService.java
CallService.js
5.页面调用方法
6.有网友反映,少写了一个类ServiceHelp.java,现在补上
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; } }
相关文章推荐
- NPAPI插件开发学习:实现非IE浏览器的类似ActiveX的本地程序(插件)调用
- 十分钟开发一个调用Activity的PhoneGap插件
- phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
- 十分钟开发一个调用Activity的PhoneGap插件
- [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自动更新App的Web内容
- phonegap中java插件开发及javascript(js)调用java代码
- win2k环境下基于JBOSS的J2EE开发实践----之三、有状态会话 Bean的开发及多种调用有状态会话Bean方法的实现
- [Phonegap+Sencha Touch] 移动开发67 安卓实现 新版提示更新并下载安装(自动更新插件)
- [Phonegap+Sencha Touch] 移动开发76 让cordova app访问远端网站也能调用cordova插件功能
- [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自己主动更新App的Web内容
- jQuery相当于对 javascript二次开发,所以基于 jQuery实现的各种插件直接调用即可
- phoneGap 调用android插件实现自动更新
- [Phonegap+Sencha Touch] 移动开发76 让cordova app訪问远端站点也能调用cordova插件功能
- 使用Eclipse-j2ee中运用wtp插件实现webservice调用
- 利用Axis2开发WebService(3)---用Java实现调用WebService的客户端程序
- phonegap插件实现对android原生的调用
- 移动开发框架Phonegap3.6 插件开发(实现拨打电话、发短信)
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例