0

こんにちは、私は最近Flash BuilderでJSONデータを使用する際に問題が発生しており、誰かがここで私を助けてくれることを望んでいました。

私はこの1か月間、この問題にしっかりと取り組んできたので、周りを見回して、見つけたり考えたりできるすべてのことを試してきました。私は単に立ち往生しています。

私はAdobeFlashBuilder4.6を搭載したBlackberryPlaybookタブレット用のフレックスモバイルアプリケーションに取り組んでいます。これはredditアプリであり、ユーザーにメインのredditフィード、サブレディット、検索機能、できればログインなどを提供するように設計されています。もちろん、この情報にアクセスするにはreddit APIの助けが必要です。この情報には、次のドキュメントがあります。https://github.com/reddit/reddit/wiki/API/ apiは、XMLまたはJSON形式のデータを使用します。

今私の問題に-上記のように、私はアプリ内にredditフィードを表示したいと思います。アイテムレンダラーを使用して、リストの各エントリ内に表示されるデータをカスタマイズできるようにしたいと思います。

1つのエントリは、1)投稿内の画像のサムネイル2)投稿のタイトル3)「いいね/嫌い」ボタンで構成されますが、現時点では重要ではありません。

もちろん、最初に、スパークリストコンポーネントをデザインビューに配置しました。次に、[データ/サービス]パネルを使用して新しいHTTPデータサービスを構成しました。URLにhttp://www.reddit.com/r/all.jsonを指定しました。リターンタイプを設定し、テスト操作を行いました。すべてがうまく接続されました。すべてのデータは通常どおりに送信されました。後で私の問題を理解できるように、データがどのように返されるかについてのアイデアを提供します。

テスト操作結果(jsonデータ構造):

  • NoName1
    • データ
      • 子供
        • [0]
          • データ
            • media_embed
            • スコア
            • id
            • タイトル
            • サムネイル
            • url
            • (など...)
          • 親切
        • [1]
          • データ
            • media_embed
            • スコア
            • タイトル
            • サムネイル
            • (など...)
          • 親切
        • [2](配列は続く)
      • modhash
    • 親切

ご覧のとおり、たとえばthumnailに到達するには、data.children[]。data.thumnailを通過する必要があります。このデータをsparkListコンポーネントにバインドしようとしたときに、上記のデータサービスを指定しました。次に、データプロバイダーオプションをChildren []に指定しました。これは、この値が通常、配列に設定されているためです。ここから問題が始まります。最後のオプションであるラベルフィールドでは、選択できる値が1つだけでした:'kind'。したがって、お分かりのように、データがさらにネストされることは期待していませんでした。種類のみを提供しますが、各配列項目内の2つの値(データと種類)で停止します。TitleとThumbnailにアクセスするには、さらに1レベル進む必要があります。これが私の問題です。

ここで、バインディングのコードを分析し、さらにネストされた値に対応するようにコードを変更してみました。これまでのところ成功はありません。バインディングが生成するコードは次のとおりです。

<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のdataProviderとして使用しようとすると、データが次のように表示されません。データ内の何かが彼らが期待するものとは異なるので、私はそれらが欲しいです。そして、それらは間違ったXMLを表示します-子または[Object、Object、etc.]

そして、そのような場合、代わりにdataProviderとして機能する空のArrayCollection()を作成するだけです(ソートやフィルタリングも可能です)。そして、データがサーバーから来るとき、私はそれに新しいオブジェクトをプッシュ()します:

[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 に答える