проблема результатов flex 3 webservice - PullRequest
1 голос
/ 05 февраля 2009

У меня проблемы с результатом вызова веб-службы. Когда результат приходит и запускает функцию resultHandler, я устанавливаю точку останова, чтобы я мог проверить результат. Я вижу, что в коллекции массивов 0 записей, но я могу видеть содержимое, поэтому я предполагаю, что ноль просто ссылается на первый индекс массива

проблема возникает, когда я пытаюсь присвоить значение коллекции массивов следующим образом;

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

Результатом этой операции является результат var со значением null. Кто-нибудь может объяснить, что здесь может происходить? большое спасибо

еще одна вещь, которую я только что заметил, что тип результата - mx.utils.ObjectProxy, я ожидаю массив

Ответы [ 4 ]

2 голосов
/ 05 февраля 2009

Если веб-сервис возвращает только один элемент, он будет десериализован как ObjectProxy. Вам придется вручную преобразовать его в массив.

Обычно я делаю это после вызова WS:

if (event.result is ArrayCollection) {
    result = event.result;
}
else {
    result = new ArrayCollection([event.result]);
}
1 голос
/ 05 февраля 2009

0 записей в массиве - это длина массива, что на самом деле означает 0. Если у вас есть что-то в индексе 0 массива, этот массив имеет длину не менее 1. Похоже, вы не получаете возврат данных, не четных и пустых массивов.

1 голос
/ 05 февраля 2009

Четан прав: операция приведения к 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());

Надеюсь, это поможет!

0 голосов
/ 22 сентября 2011

Проблема, на мой взгляд, заключается в том, что вы не можете приводить event.result как массив массивов, но вы должны приводить его как массив.

Лучше всего иметь геттер и сеттер:

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);

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...