2016-07-23 11 views
-1

Ich habe folgende Methode geschrieben benötigten HTML-Daten aus Web-Seite zu extrahieren:Ausnahmebedingung mit Beschreibung "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt".

public async System.Threading.Tasks.Task<string> getdata() 
{ 
    var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 
    HttpClient client = new HttpClient(); 
    HtmlDocument document = new HtmlDocument(); 
    byte[] htmlb = (await client.GetByteArrayAsync("http://<path-to-cgi>?passwd=" + (string)localSettings.Values["password"] + "&<param>=<hardcoded value>" + "&<param>=<hardcoded value>").ConfigureAwait(false)); 
    document.LoadHtml(Encoding.UTF8.GetString(htmlb,0,htmlb.Length)); 
    var inputs = document.DocumentNode.Descendants("div"); 
    HtmlNode elm = null; 
    foreach (var input in inputs) 
    { 
     if (input.Attributes["id"].ToString() == "main") 
     { 
      elm = input; 
     } 
    } 
    return (elm.InnerHtml); 
} 

Und wenn ich diese Methode ausführen, bekomme ich Ausnahme, die oben erwähnt wird.

+0

Sie wirklich mit grundlegenden Debugging auf diese, zumindest geben uns die Zeilennummer, und vorzugsweise, welche Variable beginnen sollten, ist, null, Sie werden wahrscheinlich in der Lage sein, die Lösung selbst herauszufinden, sobald Sie dies tun. – starlight54

+0

Mit welchem ​​Teil der Ausnahmebotschaft haben Sie Schwierigkeiten? Klingt wie ein ziemlich direkt auf den Punkt gebrachtes bisschen Information. Sie versuchen, auf ein Objekt zuzugreifen, das nicht existiert. – IInspectable

Antwort

0

Es sieht so aus, als würde Ihre if-Bedingung false zurückgeben, und elm wird kein Wert zugewiesen. Um einen Wert, um sicherzustellen, aus Ihrer Funktion zurückgegeben wird, ersetzen

return (elm.InnerHtml); 

mit

if(elm != null){ 
return (elm.InnerHtml ?? ""); 
} 
else{ 
return ""; 
} 
Verwandte Themen