Frage

Ich versuche, einige XML-i über e4x in einem Httpservice abgerufen haben zu analysieren. Die Schleife arbeitet und für jede Episode in der Liste geht es durch die Schleife. Allerdings bekomme ich folgende Fehlermeldung, wenn es in ein XMLList anhängen will.

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

Ich versuche, die lokale SQLite-Datenbank abzufragen und sehen, ob die Episode vorhanden ist (in Betrieb), und wenn es zu einem XMLList nicht anhänge und wenn nicht, dann auf den anderen XMLList hä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);
}
War es hilfreich?

Lösung

Sie haben episodeNewT und episodeWatchedT erklärt, aber Sie haben sie noch nicht instanziiert. Ich würde auch vorschlagen, verwenden Sie XMLListCollection statt XMLList, da es einfacher ist, zur Laufzeit zu ändern.

Versuchen Sie folgendes:

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 ist Ihre Variablen nicht null sein, und Sie können ihnen anhängen. Beachten Sie, dass Sie werden Umwandeln des XMLListCollection zurück zu einem XMLList am Ende von allem durch copy() verwendet wird.

Andere Tipps

Das ist meine Lösung auf XML-Knoten in dem XMLList 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);
        }
}

Aber wenn Sie mit XMLList wollen arbeiten, können Sie versuchen, die nächste:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top