2 Stimmen

Hinzufügen / Entfernen aus XMLList in einer Schleife

Ich versuche, einige XML zu parsen, die ich über e4x in einem HTTPService abgerufen habe. Die Schleife funktioniert und für jede Episode in der Liste durchläuft sie die Schleife. Allerdings erhalte ich den folgenden Fehler, wenn es versucht, an eine XMLList anzuhängen.

TypeError: Error #1009: Cannot access a property or method of a null object reference.

Ich versuche, die lokale SQLite-Datenbank abzufragen und zu sehen, ob die Episode existiert (was funktioniert), und wenn ja, an eine xmllist anzuhängen, und wenn nicht, dann an die andere xmllist anzuhängen.

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

3voto

Matt Dillard Punkte 14449

Sie haben erklärt episodeNewT y episodeWatchedT , aber Sie haben sie noch nicht instanziiert. Ich würde auch vorschlagen, Sie verwenden XMLListCollection anstelle von XMLList da sie zur Laufzeit leichter zu ändern ist.

Versuchen Sie dies:

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

Jetzt sind Ihre Variablen nicht mehr ungültig, und Sie können an sie anhängen. Beachten Sie, dass Sie die Konvertierung der XMLListCollection zurück zu einer XMLList am Ende des Prozesses mit Hilfe von copy() .

1voto

nadir.shpz Punkte 124

Dies ist meine Lösung für xml-Knoten zu xmllist hinzufügen dynamisch.

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

0voto

Vasyl Punkte 1234

Aber wenn Sie mit XMLList arbeiten wollen, können Sie das Folgende versuchen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X