Question

J'essaie d'analyser du code XML récupéré via e4x dans un service HTTPS. La boucle fonctionne et pour chaque épisode de la liste, elle parcourt la boucle. Cependant, je reçois l’erreur suivante lorsqu’il essaie d’ajouter à une liste XML.

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

J'essaie d'interroger la base de données SQLite locale et de voir si l'épisode existe (fonctionne) et s'il ajoute à un xmllist et si non, à l'autre 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);
}
Était-ce utile?

La solution

Vous avez déclaré episodeNewT et episodeWatchedT , mais vous ne les avez pas encore instanciés. Je vous recommanderais également d'utiliser XMLListCollection au lieu de XMLList , car il est plus facile de le modifier au moment de l'exécution.

Essayez ceci:

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

Vos variables ne seront plus nulles et vous pourrez les ajouter. Notez que vous allez reconvertir XMLListCollection en XMLList à la fin, en utilisant copy () .

Autres conseils

C’est ma solution pour ajouter des nœuds XML à xmllist de manière dynamique.

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

Mais si vous voulez travailler avec XMLList, vous pouvez essayer le suivant:

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top