android 用ksoap2调用webservice的方法

 


Android 用ksoap2调用webservice的方法



Android 用ksoap2 调用webService 这个问题相信困扰了很多人,网上的教程虽然很多,但经过本人的测试大多数都有问题,尤其是在模拟器上运行的时候大都会出错,经过多次的实验,终于找出了一个绝对正确的调用方法,在此与大家分享一下:



一:首先是服务端的代码:


import java.sql.*;

public class Hello {

	public String sayHello(String user) 
	{
		return "Hello,"+user;
	}
}


这是一个很简单的服务端代码,得到客户端传来的user值,然后返回值为Hello,user,然后将这个服务端代码发布成webservice服务,具体方法可以参考我的另一篇博客:

最简单的webservice配置与发布方(POJO)http://blog.csdn.net/dhbsdsg/article/details/7842157



然后查看WSDL文件:




在这里我们只需要看4个地方就行了:

第一:targetNamespace(命名空间):   http://ws.apache.org/axis2
第二:element name(方法名):   sayHello
第三:参数名: user
第四:URL(也就是这个wsdl文件的地址): http://localhost:8080/axis2/services/Hello?wsdl



二:客户端的代码:


首先要先下载ksoap包:


      ksoap2 android当前的最新版本为2.5.4,名为ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar,它的下载地址是:http://code.google.com/p/ksoap2-android/,进入页面后,点击“Downloads”标签页,如下图所示:
      
      在“Downloads”页面的下方,找到如下图所示的紫色的链接,然后在链接上点击右键,找到相关下载项进行下载即可。右键菜单中显示的下载项依据浏览器的不同而有所区别,比如我使用的360浏览器,在键接上点击右键,然后选择“使用360安全浏览器下载”即可弹出下载保存对话框。
      




然后创建一个新的工程,将下载的ksoap包导入到工程里,然后我实现的方法是在客户端的代码里写一个调用该服务的方法,我的方法名和参数和参数相同,实际应用时可以自己随便定义:

public String sayHello(String user)
	{
		String nameSpace = "http://ws.apache.org/axis2";  
		String methodName = "satHello";
		String url = "http://192.168.1.21:8080/axis2/services/Hello?wsdl";  		
		//此处一定要注意,在模拟器中运行的时候一定要把localhost改为提供服务的电脑的IP地址,否则无法运行
			
		SoapObject rpc = new SoapObject(nameSpace, methodName);
		rpc.addProperty("user", user);   //此处分号里的为webservice的参数名,后面的为你自己传的值
		HttpTransportSE ht = new HttpTransportSE(url); 
		ht.debug=true;
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		envelope.bodyOut = rpc;
	 	try {  
            ht.call(null, envelope);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }
    	SoapObject object = (SoapObject) envelope.bodyIn;
    	String result=object.getProperty(0).toString();
    	return result;	
	}
	

然后在onCreate()方法里调用你写的这个方法:

text=(TextView)findViewById(R.id.test);
text.setText(sayHello("Guardian"));

然后在模拟器里测试运行,就能看到Textview里显示:Hello,Guardian



三:注意事项:

1: //错误写法 不能强制类型转换
    //result=(String)soapObject.getProperty("return");
    //正确写法 toString();
       result=soapObject.getProperty("return").toString();


2:AndroidManifest.xml

添加访问INTERNET 权限

<uses-permission android:name="android.permission.INTERNET" />


3:  private static final String URL = "http://192.168.1.21:8080/axis2/services/Hello?wsdl";

用private static final String URL = "http://localhost:8080/axis2/services/Hello?wsdl"; 不行会出现IOException 异常



注:本文为原创,转载请注明出处,谢谢。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值