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

7 篇文章 0 订阅

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



    
    
    
}






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值