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.
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:)
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:
Hinweis: Ich habe die Rückgabevariable in einen Zeichenfolgenhauptteil geändert, sodass Sie möglicherweise keinen Stream geöffnet lassen.
Koda
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()
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%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 Ссылка .
Tags und Links android c# xamarin post webrequest