0

嗨,我最近在 flash builder 中使用 JSON 数据时遇到了一些问题,我希望有人能在这里帮助我。

在过去的一个月里,我一直在努力解决这个问题,所以我一直在环顾四周,一直在尝试我能找到或想到的一切。我只是卡住了。

我一直在为带有 Adob​​e Flash Builder 4.6 的 Blackberry Playbook 平板电脑开发一个 flex 移动应用程序。它是一个 reddit 应用程序,旨在为用户提供主要的 reddit 提要、subreddits、搜索功能、希望登录的东西等。当然,我需要借助 reddit API 来访问这些信息,其中的文档可以在这里找到:https://github.com/reddit/reddit/wiki/API/ api 使用 XML 或 JSON 格式的数据。

现在谈谈我的问题——如上所述,我想在应用程序中显示 reddit 提要。我希望能够使用项目渲染器来自定义列表每个条目中显示的数据。

一个条目将包括:1)帖子中图像的缩略图 2)帖子的标题 3)“喜欢/不喜欢”按钮,但这目前并不重要。

当然,首先,我在设计视图上放置了一个 spark List 组件。然后我使用数据/服务面板配置了一个新的 HTTP 数据服务。我为网址指定了http://www.reddit.com/r/all.json。我配置了返回类型,并进行了测试操作。一切都连接得很好。所有数据都正常通过。我会给你一个关于数据返回的想法,以便你以后可以理解我的问题。

测试操作结果(json数据结构):

  • NoName1
    • 数据
      • 孩子们
        • [0]
          • 数据
            • 媒体嵌入
            • 分数
            • ID
            • 标题
            • 缩略图
            • 网址
            • (等等等等……)
          • 种类
        • [1]
          • 数据
            • 媒体嵌入
            • 分数
            • 标题
            • 缩略图
            • (等等等等……)
          • 种类
        • [2](数组继续)
      • 模式哈希
    • 种类

如您所见,例如,要获得缩略图,您必须通过 data.children[].data.thumnail。当我尝试将此数据绑定到 spark List 组件时,我将数据服务指定为来自上述服务。然后我将数据提供程序选项指定为 Children[],因为该值通常设置为数组。现在这就是麻烦的开始。最后一个选项,标签字段,只给了我一个可供选择的值:'kind'。如您所知,它并不期望数据进一步嵌套。它停在每个数组项中的两个值上,即 Data 和 Kind,尽管它只为我提供 Kind。我需要再上一层才能访问标题和缩略图。这是我的问题。

现在,我已经分析了绑定的代码,并尝试更改它以适应进一步的嵌套值。从来没有成功过。以下是绑定生成的代码:

<s:List  

id="myList" width="100%" height="100%" change="myList_changeHandler(event)" 
    creationComplete="myList_creationCompleteHandler(event)"  labelField="kind">
<s:AsyncListViewlist="{TypeUtility.convertToCollectionredditFeedJSONResult.lastResult.data.children)}"/>         
<s:List>

显然我想要类似的东西: "TypeUtility.convertToCollection(redditFeedJSONResult.lastResult.data.children.data"然后设置labelField="title"或“缩略图”。

我当然希望有人可以帮助我。我不知道该怎么做。如果您需要任何进一步的说明,我很乐意提供。我试图尽可能清楚地解释上述情况。太感谢了。

泰德

4

1 回答 1

0

我经常遇到这种情况:从服务器获取 XML 或 JSON 数据,然后尝试将其用作 spark.components.List 或 mx.controls.Menu 的数据提供程序,然后他们就不会将数据显示为我想要它们,因为数据中的某些东西与他们期望的不同。然后他们显示错误的 XML-children 或 [Object,Object,etc.]

在这种情况下,我只是创建一个空的 ArrayCollection() 来代替它作为 dataProvider(并且也可以进行排序和/或过滤)。当数据来自服务器时,我 push() new Objects 进入它:

[Bindable]
private var _data:ArrayCollection = new ArrayCollection();

public function update(xlist:XMLList):void {
    _data.length = 0;
    for each (var xml:XML in xlist)
        _data.push({label: xml, event: xml.@event});
}

总是有效的。如果您遇到下一个问题 - 列表闪烁,那么也可以通过合并数据来解决

祝您的 Playbook 开发顺利,这是一个很酷的硬件 :-)

于 2012-01-29T21:00:37.780 回答