Volley-Ausnahmefehler bei Antwortcode 304 und 200

8

Als ich mit der Volley-Bibliothek herumspielte, bemerkte ich, dass bei der Erstellung eines POST JsonObjectRequest , wenn der Server einen Code 304 oder 200 ohne Daten in der Antwort (response.data) zurückgibt, Volley es als eine Fehlerreaktion interpretieren würde ein Erfolg.

Ich kann es lösen, indem ich ein paar Codezeilen in der Methode Response<JSONObject> parseNetworkResponse(NetworkResponse response) in der Klasse JsonObjectRequest.java hinzufüge.

%Vor%

Ist es die beste Lösung für dieses Problem?

Danke!

BEARBEITEN

Überprüfen der Klasse BasicNetwork.java Ich erkannte, dass Volley überprüft, ob eine Antwort keine Daten hat, indem Sie fragen, ob httpResponse.getEntity() != null .

%Vor%

Aber das Problem ist immer noch die JSONException, die auftritt, wenn Volley versucht, eine neue Zeichenfolge mit response.data == new byte[0] in der parseNetworkResponse-Methode zu erstellen.

    
Miguel 22.02.2014, 11:18
quelle

1 Antwort

6

Miguel- Wird diese Methode nicht nur genannt, wenn es eine Erfolgsantwort ist?

Für alle Statuscodes & lt; 200 oder Statuscode & gt; 200 volley ruft parseNetworkError (VolleyError volleyError) anstelle von parseNetworkResponse (NetworkResponse response) auf. Schau hier -

Ссылка

Zeilennummer -118-120

%Vor%

und der entsprechende catch-Block Zeilennummer - 128 -151

%Vor%

Wenn Sie dieses Verhalten überschreiben möchten, können Sie Ihre statuscodespezifische Implementierung in der BasicNetwork.java- & gt; performRequest-Methode hinzufügen.

Bearbeiten: Also nicht wegen Statuscode sondern wegen der leeren Antwort. Nun, ich denke, Sie tun das Richtige, um Ihre benutzerdefinierte Request-Klasse zu implementieren. Volley kommt mit ein paar vordefinierten beliebten Arten von Anfragen für die Benutzerfreundlichkeit, aber Sie können immer Ihre eigenen erstellen. Statt einer statuscodebasierten Implementierung würde ich lieber überprüfen, ob der folgende String leer ist, bevor ich ihn entziehe -

%Vor%

** habe das nicht getestet, aber Sie bekommen den Punkt:)

    
Gaurav 23.02.2014, 12:49
quelle