zoukankan      html  css  js  c++  java
  • 在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。

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

      2017.4.23

      今天又遇到了同样的问题,但是这次就是从以前的经验中,来寻找问题了。我在返回一个存放有Map的List时候,出现了返回值为NULL的情况,Logcat里边显示的就是AnyType{},这次肯定是其他原因。

      仔细观察了一下代码,发现我在定义Map的时候是这样定义的:

      HashMap<String, String> map = new HashMap<String,String>();

      同理,拿我的List定义就是这样:

      ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();

      相比之前的定义,不一样的地方好像是Map<>中的两个参数。可能因为返回的数据不一定都是String类型的原因吧,但真正为什么,我也不清楚。只是更改了一下里边的参数这个返回值问题才解决,代码如下:

    1     ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
    2     HashMap<String, Object> map = new HashMap<String,Object>();

      有问题再来补充吧!!!

  • 相关阅读:
    C# 实现简单打印(二)打印一个文本文档,打印的内容是多行的
    用户管理:登录窗体通过ShowDialog()方法实现切换
    SQL 定义与使用数据库及表 实例_(学生,课程表,选修表)
    temp0305
    计算机硬件通用功能类:硬件信息控制器(主机名,cpu编号,网卡地址,MAC地址,主硬盘编号,ip地址,获取最大线程数,验证服务IP)
    socket编程:简单的TCP服务器
    从输入的邮箱地址中提取用户名
    C#基础:helloWord book 实例小集合
    怎么样datatable表中增加一行合计行?
    C#基础:多态:基类可以定义并实现虚(virtual)方法,派生类可以重写(override)这些方法
  • 原文地址:https://www.cnblogs.com/cnyulei/p/6722066.html
Copyright © 2011-2022 走看看