首页 > 代码库 > 在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}

在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}

  最近在做毕业设计的时候,涉及到了安卓端访问web service服务端数据库,并返回一个值,当我把web service测试通过后,想写一个简单的安卓测试程序,来实现服务端数据库访问,通过web service中的一个serch()方法,然后发现,每次的返回值都是一个AnyType{},Logcat如图所示:

技术分享

 

 

 

 

 

 

 

 

 

  网上搜集了很多资料,产生的原因其实很简答,是因为服务端返回值为null,Logcat中显示的就职anyType{},找到了原因,解决起来也就好说了,其中包括这些方法:

  {解决方法引用自博客园用户日行一米,这里表示感谢}

  1、只需要在 WebService的类属性中加入SoapRpcServiceAttribute属性就可以了。
      [SoapRpcService(RoutingStyle=SoapServiceRoutingStyle.SoapAction)]

     2、参数名必须跟webservice方法中的参数名一致,因为ws将参数名自动改为了arg0、arg1,所有调用时参数也需要修改。

     3、NAMESPACE  后面没有加“/”

  特此说明:

  方法一我不知道去哪儿加,看博主在解决问题时候,说方法一加了之后,直接报了异常,我也就没管。

  方法二则是我解决问题的关键,看我的Logcat中,传入参数为 username = 10010,所以传过去之后变量是username(目前我是这样认为),而webservice会将参数名自动改为arg0、arg1......所以参数不同,导致了传回的结果变成了null,显示return anyType{}。

        //调用方法时需要传入一个参数
        //为了与web service保持一致,需要设置为arg0,因为web service会自动将其转化为arg0 arg1
        rpc.addProperty("arg0",username);

 

  还有一个原因就是

            //设置是否调用的是dotNet开发的WebService,服务器是.net的需要设置为true,java不用
            envelope.dotNet = false; 

  我的服务端用的Java写的,所以这个属性应该设置为false。

至此,我的问题已经解决了!!!

在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}