루프에있는 동안 xmllist에서 추가 / 제거하십시오
-
06-07-2019 - |
문제
httpservice에서 E4X를 통해 검색 한 XML을 구문 분석하려고합니다. 루프는 작동하고 목록의 각 에피소드에 대해 루프를 통과합니다. 그러나 xmllist에 추가하려고 할 때 다음과 같은 오류가 발생합니다.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
로컬 SQLITE 데이터베이스를 쿼리하고 에피소드가 존재하는지 (작동)와 하나의 XMLLIST에 추가되는지 확인하고 그렇지 않은 경우 다른 XMLLIST에 추가하려고합니다.
public static function seasonFavHandler(evt:ResultEvent):void {
Application.application.ManagePage.selectedShow =
Application.application.ManagePage.gridFavourites.selectedItem as XML;
episodeNumber = XML(evt.result).descendants("episode");
var episode:Object = episodeNumber;
for each(episode in episodeNumber) {
currentEpisode = episode as XML;
achkStatement = new SQLStatement();
achkStatement.sqlConnection = dbconnection;
achkStatement.text = "select :episodename from episodes where episodename = :episodename";
achkStatement.parameters[":episodename"] = episode.title;
achkStatement.addEventListener(SQLEvent.RESULT, episodeHandler);
achkStatement.execute();
trace(episode.title);
}
//Application.application.ManagePage.episodeList = episodeNumber;
seasonHttpService.removeEventListener(ResultEvent.RESULT, seasonFavHandler);
CursorManager.removeBusyCursor();
}
private static function episodeHandler(event:SQLEvent):void {
var result:SQLResult = achkStatement.getResult();
var episodeNewT:XMLList;
var episodeWatchedT:XMLList;
if (!result.data) {
episodeNewT.appendChild(currentEpisode);
//Application.application.ManagePage.gridUnwatched.addChild(currentEpisode);
} else {
episodeWatchedT.appendChild(currentEpisode);
//Application.application.ManagePage.gridWatched.addChild(currentEpisode);
}
Application.application.ManagePage.episodeNew = episodeNewT;
Application.application.ManagePage.episodeWatched = episodeWatchedT;
achkStatement.removeEventListener(SQLEvent.RESULT, episodeHandler);
}
해결책
당신은 선언했습니다 episodeNewT
그리고 episodeWatchedT
, 그러나 당신은 아직 그들을 인스턴스화하지 않았습니다. 나는 또한 당신이 사용하는 것이 좋습니다 XMLListCollection
대신에 XMLList
, 런타임에 수정하기가 더 쉽기 때문입니다.
이 시도:
var episodeNewT:XMLListCollection = new XMLListCollection();
var episodeWatchedT:XMLListCollection = new XMLListCollection();
if (!result.data) {
episodeNewT.addItem(currentEpisode);
} else {
episodeWatchedT.addItem(currentEpisode);
}
Application.application.ManagePage.episodeNew = episodeNewT.copy();
Application.application.ManagePage.episodeWatched = episodeWatchedT.copy();
이제 변수는 무효가되지 않으며 그들에게 추가 할 수 있습니다. 변환 할 것입니다 XMLListCollection
다시 XMLList
결국 사용하여 모든 것을 사용합니다 copy()
.
다른 팁
이것은 내 해결책입니다 XMLLIST에 XML 노드를 추가하십시오 동적으로.
private function addXmlChild(xmlList:XMLList, xmlNode:XML):void
{
try
{
if(xmlList.children().length() != 0)
{
xmlList[xmlList.length() + 1] = xmlNode;
}
else
xmlList[0] = xmlNode;
}
catch(error:Error)
{
LogWriter.ErrorLog("addXmlChild, " + error.message);
}
}
그러나 xmllist와 함께 일하고 싶다면 다음을 시도 할 수 있습니다.
var episodeNewT:XMLList;
var episodeWatchedT:XMLList;
if (!result.data) {
episodeNewT= XMLList(currentEpisode);
//Application.application.ManagePage.gridUnwatched.addChild(currentEpisode);
} else {
episodeWatchedT = XMLList(currentEpisode);
//Application.application.ManagePage.gridWatched.addChild(currentEpisode);
}
제휴하지 않습니다 StackOverflow