您的位置:首页 > 其它

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 中加入

<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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐