2012-05-15 6 views
0

В настоящее время я получаю сообщение об ошибке в строке 148 во время выполнения:Adobe Air: почему этот DataProvider создает ошибку?

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at PlantDB/ResultFill()[C:\Users\usern\Adobe Flash Builder 4.6\PlantDB\src\SQLiteCode.as:148] 

код в строке 148:

leftList.dataProvider = new ArrayCollection(arr); 

До прихода в этой линии 148, программа проверит, что массив обр является не null с if (arr! = null), поэтому я на 100% уверен, что arr не является нулевым.

Содержание обр от SQLite:

arr = sqls.getResult().data; 

Есть несколько объектов в базе данных, и я вижу, что я могу получить содержимое из базы данных просто отлично. В самом деле, до линии 148, я проверил содержимое внутри аранжировки:

var tree:TreeClass_Full = arr[0]; 

В отладчике, я проверил объект дерева выше, и я вижу, что все переменные из базы данных SQLite передаются в дерево объект правильно. Фактически, я также проверил arr [1], arr [2] и т. Д., И я вижу, что объекты получили правильные данные.

На мой взгляд, sqlite и все, что не похоже на проблему, но когда я добавляю этот Array arr в дерево var: TreeClass_Full = arr [0] ;, появляется ошибка.

Я не понимаю. Не удается получить доступ к свойству или методу ссылки на нулевой объект? Каков скрытый процесс в dataProvider, который вызывает эту ошибку?

Мои leftList здесь:

 <s:HGroup width="100%" height="85%" verticalAlign="middle"> 
      <s:List id = "leftList" width = "45%" height = "95%" 
        dragEnabled="true" dragMoveEnabled="true" dropEnabled="true" 
        itemRenderer="resultRenderer"/> 
      <s:List id = "rightList" width = "45%" height = "95%" 
        dragEnabled="true" dragMoveEnabled="true" dropEnabled="true" 
        itemRenderer="resultRenderer"/> 
     </s:HGroup> 

и мой ItemRenderer (resultRenderer) является:

<?xml version="1.0" encoding="utf-8"?> 
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       autoDrawBackground="true"> 
    <s:HGroup x="5" y="5" width="350" height="150" horizontalAlign="center" verticalAlign="middle"> 
     <mx:Image id = "resultImage" width="100" height="100"/> 
     <s:TextArea id="resultTextArea" height="141" editable="false" 
        text = "{data.Common_Name}"/> 
    </s:HGroup> 
</s:ItemRenderer> 

Если кто-нибудь знает, что вызывает эту ошибку во время DataProvider, пожалуйста, помогите.

+4

Нет скрытых процессов. Это 'leftList', которого не существует. Метод 'ResultFill', вероятно, вызывается до создания' leftList'. – RIAstar

+0

...... Я в шоке. O_O Я вижу ... Да, leftList действительно null. Поскольку мой HGroup находится в другом представлении (хотя тот же .mxml-файл), он не существует, пока я не захочу просмотреть соответствующий viewstack. Теперь, возможно ли иметь leftList, не переходя к соответствующему представлению? – Karl

+1

Возможно, но это не лучший подход, особенно в мобильном проекте. Вы просто устанавливаете dataProvider всякий раз, когда компонент создается. Самый простой способ сделать это - привязка. – RIAstar

ответ

0

Как было отмечено выше:

Это leftList, что не существует. Метод ResultFill, вероятно, вызывается до создания leftList. leftList действительно null. Поскольку мой HGroup находится в другом представлении (хотя тот же .mxml-файл), он не существует, пока я не захочу просмотреть соответствующий viewstack.