Xamarin Android httpwebrequest, Zugriff auf ein entsorgtes Objekt nicht möglich

7

Ich habe eine Android Mobile App, und ich möchte webrequest an den Server senden, um einige Daten zu posten, aber bevor ich die Daten posten, sende ich eine http get-Anfrage, um einige Daten zu erhalten, und sende dann eine Anfrage, zuerst erhalte ich erfolgreich erhalten, aber wenn ich die Postanforderung sende, wirft es unten Ausnahme auf dieser Linie meines Codes requestStream.Write(bytes, 0, bytes.Length);

Die Ausnahme ist:

  

System.ObjectDisposedException: Kann auf ein angeordnetes Objekt nicht zugreifen.   Objektname: 'System.Net.Sockets.NetworkStream'.

und hier ist meine Abfrage und Post-Anfrage-Code GET:

%Vor%

Mit diesem Code bekomme ich mein Ergebnis ohne Probleme, und hier ist mein POST:

%Vor%

Ich habe Wege gesucht und ausprobiert, aber ich habe nicht die Lösung, und plus, wenn ich die erste Funktion kommentieren, und nur die zweite Funktion ausführen, wird es gut funktionieren, aber wenn ich die erste und dann die zweite führt, löst die Ausnahme aus , gehört alles dazu, um die Stream- und Web-Antwort vom ersten Code zu entfernen? Ich denke, die Verwendung von Anweisung ist bereits disposed.

jede Hilfe geschätzt.

    
Younis Qadir 16.08.2017, 13:34
quelle

4 Antworten

1

Nachdem ich viele Möglichkeiten ausprobiert habe und die obigen Antworten gelesen habe, versuche ich sie schließlich zu lösen, indem ich den Code wie folgt mache,  GET eins:

%Vor%

und POST eins:

%Vor%

Wenn ich den Anfragestream innerhalb von block benutze, wird immer noch die Ausnahme ausgelöst, aber ohne block wird es funktionieren:)

    
Younis Qadir 27.08.2017, 07:21
quelle
4

Dies kann nur ein Fall sein, in dem Sie sicherstellen, dass Sie die korrekten using -Anweisungen verwenden, wenn sie die ausgehenden und eingehenden Datenströme korrekt schließen. Sehen Sie sich das unten modifizierte Beispiel an, das sollte für Sie funktionieren:

%Vor%

Hinweis: Ich habe die Rückgabevariable in einen Zeichenfolgenhauptteil geändert, sodass Sie möglicherweise keinen Stream geöffnet lassen.

Koda

    
Kodaloid 23.08.2017 12:48
quelle
3
  • Ist Ihr Gerät / Emulator mit dem Internet verbunden?

  • Ihre Anwendung benötigt die Berechtigung für die Verbindung mit dem Internet?

  • Sie müssen den Request-Stream requestStream.Close() vor dem Aufruf webRequest.GetResponse()

  • schließen
  • Es ist erforderlich, using für IDisposable-Objekte wie in Ihrer GetTokenInfo() -Methode zu verwenden, andernfalls treten Probleme mit der Speicherüberlastung auf

Ich teste nur Ihren Code und IT WORKS , dies ist meine vollständige Test-Konsolenanwendung

%Vor%     
Danilo Calzetta 16.08.2017 14:11
quelle
1

nur um sicher zu sein - versuchen Sie, extra mit - statt

zu entfernen

using (var requestStream = response.GetResponseStream()) { using (var reader = new StreamReader(requestStream))

verwenden

using (var reader = new StreamReader(response.GetResponseStream())

Weitere Informationen finden Sie Ссылка .

    
Mikl X 27.08.2017 07:02
quelle

Tags und Links