【问题标题】:flex 3 webservice results issueflex 3 webservice结果问题
【发布时间】:2009-02-05 18:29:10
【问题描述】:

我对网络服务调用的结果有疑问。当结果进来并启动 resultHandler 函数时,我设置了一个断点,以便我可以检查结果。我可以看到数组集合中有 0 条记录但是我可以看到内容所以我假设零只是指数组的第一个索引

当我尝试按如下方式将值分配给数组集合时,就会出现问题;

public function resultHandler(event:ResultEvent):void{
    var result:ArrayCollection = event.result as ArrayCollection;

此操作的结果是一个值为 null 的结果 var。谁能解释这里可能发生的事情?非常感谢

我刚刚注意到的另一件事是结果类型是 mx.utils.ObjectProxy,我期待一个数组

【问题讨论】:

    标签: apache-flex web-services


    【解决方案1】:

    如果 web 服务只返回一个元素,它将被反序列化为 ObjectProxy。您必须手动将其转换为数组。

    我通常会在 WS 调用之后执行此操作:

    if (event.result is ArrayCollection) {
        result = event.result;
    }
    else {
        result = new ArrayCollection([event.result]);
    }
    

    【讨论】:

      【解决方案2】:

      Chetan 是对的——对 ArrayCollection 的强制转换操作失败,因为源对象不是 ArrayCollection。试试这个:

      public function resultHandler(event:ResultEvent):void
      {
          var ac:ArrayCollection = new ArrayCollection([event.result])
          // ...
      }
      

      “as”运算符将在运行时发生异常的情况下返回null - 在您的情况下,从 ObjectProxy 转换为 ArrayCollection。相反,如果您将 event.result 作为数组的唯一成员传递(通过用 [] 包围它),您的 ArrayCollection 将正确构造,并且您将能够正常检索该对象:

      var o:Object = ac.getItemAt(0) as Object;
      trace(o.yourObjectProperty.toString());
      

      希望对你有帮助!

      【讨论】:

        【解决方案3】:

        数组中的 0 条记录是数组的长度,这实际上意味着 0。如果数组的索引 0 中有内容,则该数组的长度至少为 1。看起来你没有得到任何数据返回,偶数和空数组集合。

        【讨论】:

          【解决方案4】:

          我认为的问题是不能将 event.result 转换为数组集合,但必须将其转换为数组。

          这方面的最佳实践是拥有一个 getter 和一个 setter:

          private var _acLocation:ArrayCollection=new ArrayCollection;
          
          public function set acLocation(acLocation:ArrayCollection):void{
          
          _acLocation=acLocation;
          
          //do this if you want for exaple to assign the arraycollection to a datagrid dataprovider
          
          dgMyDataGrid.dataProvider=_acLocation;
          
          }
          
          public function get acLocation():ArrayCollection{
          
          
          return _acLocation;
          }
          

          然后在一个服务调用的结果处理函数中,代码

          acLocation=new ArrayCollection(event.result as Array);
          

          希望对你有帮助

          【讨论】:

            猜你喜欢
            • 2011-05-22
            • 2010-12-25
            • 1970-01-01
            • 2011-04-24
            • 1970-01-01
            • 1970-01-01
            • 2018-02-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多