Volley-Ausnahmefehler bei Antwortcode 304 und 200

Als ich mit der Volley-Bibliothek herumspielte, bemerkte ich das beim Erstellen eines POSTJsonObjectRequest , wenn der Server einen Code 304 oder 200 ohne Daten in der Antwort zurückgibt(response.data), Volley interpretiert es als Fehlerantwort, anstatt als Erfolg.

Ich schaffe es, es zu lösen, indem ich der Methode ein paar Zeilen Code hinzufügeResponse<JSONObject> parseNetworkResponse(NetworkResponse response) in der KlasseJsonObjectRequest.java.

@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
    try {
        if (!response.notModified) {// Added for 304 response
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } else // Added for 304 response
            return Response.success(new JSONObject(),HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        Log.v("Volley", "UnsupportedEncodingException " + response.statusCode);
        if (response.statusCode == 200)// Added for 200 response
            return Response.success(new JSONObject(), HttpHeaderParser.parseCacheHeaders(response));
        else
            return Response.error(new ParseError(e));
    } catch (JSONException je) {
        Log.v("Volley", "JSONException " + response.statusCode);
        if (response.statusCode == 200)// Added for 200 response
            return Response.success(new JSONObject(),HttpHeaderParser.parseCacheHeaders(response));
        else
            return Response.error(new ParseError(je));
    }
}

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

Vielen Dank!

BEARBEITEN

Überprüfung der KlasseBasicNetwork.java Ich erkannte, dass Volley prüft, ob eine Antwort keine Daten enthält, indem er fragt, obhttpResponse.getEntity() != null.

// Some responses such as 204s do not have content. We must check.
    if (httpResponse.getEntity() != null) {
        responseContents = entityToBytes(httpResponse.getEntity());         
    } else {// Add 0 byte response as a way of honestly representing a
    // no-content request.
        responseContents = new byte[0];
    }

Das Problem ist jedoch immer noch die JSONException, die auftritt, wenn Volley versucht, einen neuen String mit zu erstellenresponse.data == new byte[0] in der parseNetworkResponse-Methode.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage