В настоящее время я занимаюсь разработкой приложения для Android с использованием Flex 4.5.1, и у меня возникла проблема при попытке передать данные, хранящиеся в массиве SharedObject, в мою веб-службу для запроса базы данных.код ниже показывает, как я храню данные в SharedObject:
var so:SharedObject = SharedObject.getLocal("app");
public var prefsArray:ArrayCollection = new ArrayCollection(so.data.prefs);
protected function prefs_btn_click(event:MouseEvent):void
{
prefsArray.source.push(getFrsByIDResult.lastResult.id);
so.data.prefs = [prefsArray];
var flushStatus:String = so.flush();
if (flushStatus != null) {
switch(flushStatus) {
case SharedObjectFlushStatus.PENDING:
so.addEventListener(NetStatusEvent.NET_STATUS,
onFlushStatus);
break;
case SharedObjectFlushStatus.FLUSHED:
trace("success");
break;
}
}
}
protected function onFlushStatus(event:NetStatusEvent):void
{
trace(event.info.code);
}
Я протестировал SharedObject, чтобы убедиться, что информация вводится в него правильно, и все выглядит нормально.Теперь я использовал приведенный ниже код, чтобы извлечь данные из SharedObject и попытаться отправить их в веб-службу PHP для выполнения запроса к БД.
var so:SharedObject = SharedObject.getLocal("app");
var arrCol:ArrayCollection = new ArrayCollection(so.data.prefs);
var str:String = new String(arrCol.toString());
protected function list_creationCompleteHandler(event:FlexEvent):void
{
getPrefsByprefIdsResult.token = prefsService.getPrefsByPrefIds(so.data.prefs);
}
Я протестировал Web-сервис во Flex и имеюон настроен на получение массива Ints ( int [] ) и работает, когда я запускаю на нем тестовую операцию с двумя фиктивными значениями.Однако когда я пытаюсь использовать приведенный выше код для передачи веб-службы данных общего объекта, я получаю эту ошибку:
TypeError: Error #1034: Type Coercion failed: cannot convert []@97e97e1 to mx.collections.ArrayCollection.
at views::**************/list_creationCompleteHandler()[C:\Users\Jack\Adobe Flash Builder 4.5\****************\src\views\*******************.mxml:25]
at views::*********************/__list_creationComplete()[C:\Users\Jack\Adobe Flash Builder 4.5\****************\src\views\***************.mxml:94]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
at mx.core::UIComponent/set initialized()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:1818]
at mx.managers::LayoutManager/validateClient()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1090]
at mx.core::UIComponent/validateNow()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:8067]
at spark.components::ViewNavigator/commitNavigatorAction()[E:\dev\4.5.1\frameworks\projects\mobilecomponents\src\spark\components\ViewNavigator.as:1878]
at spark.components::ViewNavigator/commitProperties()[E:\dev\4.5.1\frameworks\projects\mobilecomponents\src\spark\components\ViewNavigator.as:1236]
at mx.core::UIComponent/validateProperties()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:8209]
at mx.managers::LayoutManager/validateProperties()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:597]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:783]
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]
Я заменил определенные имена файлов и местоположений на *, чтобы защитить работу, которую я делаю, но может кто-нибудь, пожалуйста, помогите мне с этими проблемами, так как я считаю, что это должно быть что-то простое ???
Спасибо
хорошо, поэтому позвольте мне объяснить более подробно.Это было разработано для приложения для Android, как я уже сказал, но я пытаюсь постоянно сохранять закладки с использованием локального общего объекта.
Первый фрагмент кода, который вы видите выше, предназначен для созданияАтрибут LSO для закладки, которую я хочу создать, и представьте, что может быть несколько закладок, установленных в разное время, как в веб-браузере.Единственный способ, который я смог найти, - это сохранить эти элементы / детали в массиве, который я извлек, а затем обновить перед сохранением в LSO и сохранением.
Второй фрагмент кода, связанный с представлением "Страница закладок »со списком всего контента, который я добавил в закладки.Теперь я хотел, чтобы я мог вызвать атрибут LSO, который содержал идентификаторы закладок, а затем загрузить их данные в виде списка.
Мне удалось создать LSO исохраняйте детали закладок и позволяйте их обновлять и добавлять записи.Также я убедился, что имеющийся у меня PHP-код извлекает все объекты базы данных, относящиеся к массиву идентификаторов, и это было проверено с помощью flex.Единственное, что я не могу сделать, это передать идентификаторы в файл веб-службы PHP.Код в файле веб-службы приведен ниже, если это поможет:
public function getPrefsByPrefIds($PrefIds) {
$stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename WHERE $this->tablename.id IN(" .implode(",", $PrefIds). ")");
$this->throwExceptionOnError();
mysqli_stmt_execute($stmt);
$this->throwExceptionOnError();
$rows = array();
mysqli_stmt_bind_result($stmt, $row->id, $row->name, $row->desc);
while (mysqli_stmt_fetch($stmt)) {
$rows[] = $row;
$row = new stdClass();
mysqli_stmt_bind_result($stmt, $row->id, $row->name, $row->desc);
}
mysqli_stmt_free_result($stmt);
mysqli_close($this->connection);
return $rows;
}
Да, я уже пробовал это, но спасибо.Я сам добился некоторого прогресса, экспериментируя с различными типами объектов, которые могут храниться в SharedObjects.Мне удалось получить часть решения, работающую с этим кодом:
Этот код предназначен для захвата информации о бумарке и сохранения ее в arrayCollection перед ее передачей в bytesArray и сохранением * 1031.*
var so:SharedObject = SharedObject.getLocal("app");
public var prefArray:ArrayCollection = new ArrayCollection(so.data.prefs);
protected function prefs_btn_click(event:MouseEvent):void
{
prefArray.source.push(getCompaniesByIDResult.lastResult.id);
so.data.prefs = [prefArray];
var bytes:ByteArray = new ByteArray();
bytes.writeObject(prefArray);
so.data.ac = bytes;
var flushStatus:String = so.flush();
if (flushStatus != null) {
switch(flushStatus) {
case SharedObjectFlushStatus.PENDING:
so.addEventListener(NetStatusEvent.NET_STATUS,
onFlushStatus);
break;
case SharedObjectFlushStatus.FLUSHED:
trace("success");
break;
}
}
}
protected function onFlushStatus(event:NetStatusEvent):void
{
trace(event.info.code);
}
Этот следующий код предназначен для извлечения этой информации из байтового массива SahredObjects и помещения ее обратно в коллекцию массивов
var so:SharedObject = SharedObject.getLocal("app");
var ba:ByteArray = so.data.ac as ByteArray;
var ac:ArrayCollection;
protected function list_creationCompleteHandler(event:FlexEvent):void
{
ba.position = 0;
ac = ba.readObject() as ArrayCollection;
getPrefsByPrefIdsResult.token = prefsService.getPrefsByPrefIds(ac);
}
, как я уже говорилработает незначительно, только если я сохраню только одну закладку (идентификатор) для элемента, а затем перейду к списку закладок, детали для этой закладки будут успешно восстановлены, однако, если я сохраню более одной закладки (2 или более идентификаторов),страница не будет загружать детали, я не получаю сообщение об ошибке, но я считаю, что оно зависает, потому что оно ищет, скажем, идентификаторы «1,2» вместо «1» и «2», но я не знаю, почему это происходит или какрешить это.Я ценю совет, который мне дали, но мне трудно, нет никого, кто мог бы помочь мне с этой проблемой, и мне приходится проводить различные эксперименты с кодом.Может кто-нибудь, пожалуйста, помогите мне с этим, я был бы очень признателен :-) Спасибо