微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

phonegap3.4.x webservice插件开发实践-实现webservice调用

本文已经假设你已经安装好了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;
    }



    
    
    
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐