Проблемы с привязкой данных JSON к списку мобильных устройств в Adobe Flash Builder

Здравствуйте, в последнее время у меня возникли проблемы с использованием данных JSON в Flash Builder, и я надеялся, что кто-нибудь сможет мне помочь.

Я провел последний месяц, основательно работая над этой проблемой, так что я осматривался, пробовал все, что мог найти или придумать. Я просто застрял.

Я работаю над гибким мобильным приложением для планшета Blackberry Playbook с Adobe Flash Builder 4.6. Это приложение Reddit, предназначенное для предоставления пользователям основного канала Reddit, субреддитов, функции поиска, возможно, входа в систему и т. д. Конечно, мне нужна помощь Reddit API для доступа к этой информации, документацию по которой можно найти здесь: https://github.com/reddit/reddit/wiki/API/ API использует данные в формате XML или JSON.

Теперь о моей проблеме. Как упоминалось выше, я хочу отображать ленту Reddit внутри приложения. Я хочу иметь возможность использовать средство визуализации элементов для настройки данных, отображаемых в каждой записи списка.

Одна запись будет состоять из: 1) эскиза изображения в сообщении 2) заголовка сообщения 3) кнопки «нравится/не нравится», но это неважно в данный момент.

Конечно, для начала я поместил компонент искрового списка в представление дизайна. Затем я настроил новую службу данных HTTP с помощью панели «Данные/Службы». Я указал http://www.reddit.com/r/all.json для URL. Я настроил тип возврата и выполнил тестовую операцию. Все нормально подключилось. Все данные пришли в норме. Я дам вам представление о том, как возвращаются данные, чтобы вы могли понять мою проблему позже.

Результаты тестовой операции (структура данных json):

  • NoName1
    • data
      • after
      • до
      • children
        • [0]
          • data
            • media_embed
            • счет
            • id
            • заглавие
            • миниатюра
            • URL
            • (и т.д. и т.п...)
          • своего рода
        • [1]
          • data
            • media_embed
            • счет
            • заглавие
            • миниатюра
            • (и т.д. и т.п...)
          • своего рода
        • [2] (массив продолжается)
      • модхэш
    • своего рода

Как видите, например, чтобы добраться до миниатюры, вам нужно пройти через data.children[].data.thumnail. Когда я попытался связать эти данные с компонентом искрового списка, я указал службу данных из приведенной выше. Затем я указал для параметра Поставщик данных значение Children[], так как это значение обычно устанавливается для массива. Вот тут-то и начинаются проблемы. Последняя опция, Поле метки, давала мне только одно значение на выбор: «вид». Итак, как вы можете сказать, он не ожидал, что данные будут вложены дальше. Он останавливается на двух значениях только внутри каждого элемента массива, которые будут данными и типом, хотя он предлагает мне только тип. Мне нужно перейти на один уровень выше, чтобы получить доступ к заголовку и эскизу. Это моя проблема.

Теперь я проанализировал код для привязки и попытался изменить его, чтобы приспособить дополнительное вложенное значение. Никакого успеха. Ниже приведен код, который генерирует привязка:

<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" или «миниатюру».

Я очень надеюсь, что кто-нибудь поможет мне с этим. Я не в своем уме, что делать. Если вам нужны дополнительные разъяснения, я буду рад предоставить их. Я попытался объяснить ситуацию выше как можно яснее. Большое спасибо.

Тед


person Theo Mavrakis    schedule 29.01.2012    source источник
comment
Я все еще теряюсь в том, как решить эту проблему. Может ли кто-нибудь еще помочь, пожалуйста?   -  person Theo Mavrakis    schedule 03.02.2012


Ответы (1)


У меня часто возникает такая ситуация: получить данные XML или JSON с сервера, затем попытаться использовать их в качестве поставщика данных для spark.components.List или для mx.controls.Menu, и тогда они просто не будут отображать данные как Я хочу их, потому что что-то в данных отличается от того, что они ожидают. А затем они отображают неправильные XML-потомки или [Object, Object и т. д.]

И в таких случаях я просто создаю пустой 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, это классная штука :-)

person Alexander Farber    schedule 29.01.2012
comment
для начала, я даже не могу начать благодарить вас за вашу помощь, честно. Во-вторых, если вы еще не поняли, я начинающий разработчик без опыта работы с actionscript и т. д. Я больше ориентируюсь на C++. Ненавижу это спрашивать, но не могли бы вы помочь мне реализовать описанный выше метод? потому что я не уверен, что полностью понимаю. Еще раз, спасибо - person Theo Mavrakis; 30.01.2012
comment
Кроме того, я пытался работать с образцом кода, который вы мне дали выше, и, среди прочего, он выдал мне ошибку для _data.push, поскольку, по-видимому, это неопределенный метод. - person Theo Mavrakis; 30.01.2012
comment
Обновленный код (2 файла) в stackoverflow.com/questions/8694276/ работает для вас? - person Alexander Farber; 30.01.2012
comment
Хорошо, я просмотрел код в сообщении выше и попытался его реализовать. Я дошел до того, что ошибок не возникает, но я понятия не имею, как реализовать этот код, чтобы он вставлял данные в список. Кроме того, я не уверен, как использовать данные json или, скорее, как их реализовать. Спасибо - person Theo Mavrakis; 31.01.2012