Ich verwende Volley für meine Android-App, um Daten von meinem Server zu holen. Es funktioniert gut, außer wenn der Fehler von meinem Server behandelt wird. Mein Server sendet diese Antwort, wenn es ein Fehler ist:Android: Wie behandeln Nachricht Fehler vom Server mit Volley?
{
"status": 400,
"message": "Errors (2): A name is required- Julien is already used. Not creating."
}
Mein Ziel ist es, die Nachricht zu bekommen und es dann in einem Toast
anzuzeigen. Ich habe ein Beispiel dafür genommen, wie es geht, aber es funktioniert nicht.
Es ist mein Fehler Zuhörer:
public void onErrorResponse(VolleyError error) {
int statusCode = error.networkResponse.statusCode;
NetworkResponse response = error.networkResponse;
Log.d("testerror",""+statusCode+" "+response.data);
// Handle your error types accordingly.For Timeout & No connection error, you can show 'retry' button.
// For AuthFailure, you can re login with user credentials.
// For ClientError, 400 & 401, Errors happening on client side when sending api request.
// In this case you can check how client is forming the api and debug accordingly.
// For ServerError 5xx, you can do retry or handle accordingly.
if(error instanceof NetworkError) {
} else if(error instanceof ClientError) {
} else if(error instanceof ServerError) {
} else if(error instanceof AuthFailureError) {
} else if(error instanceof ParseError) {
} else if(error instanceof NoConnectionError) {
} else if(error instanceof TimeoutError) {
}
showProgress(false);
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
Und es ist das Ergebnis meines Debugger: Testerror: 400 [B @ 430b8d60
EDIT: Außerdem meine error.getMessage () ist Null.
Also ich verstehe nicht, warum meine Variable response.data nicht die Antwort von meinem Server ist.
Wenn jemand weiß, wie ich die Nachricht von meinem Server bekommen kann, wird es cool sein.
Thx,
erros zu behandeln Du genau schreiben :) ich die Antwort kurz vor Ihrem Beitrag gefunden. Und ich erstelle auch eine Klasse MessageServer mit 2 Attributen: Status und Nachricht wie folgt Ich benutze Gson, um meine Zeichenfolge in diese Klasse zu konvertieren und dann die Nachricht zu erhalten. – FlavienBert
Hallo, Ich möchte nur hinzufügen, dass der @Override-Ansatz (den ich für sehr elegant halte) nicht flexibel ist, wenn Sie nach Netzwerkantwortdaten suchen möchten, da Sie diese Informationen verwerfen und einen neuen VolleyError mit einer String-Nachricht erstellen drin. Leider ist es nicht möglich, eine Instanz mit der ursprünglichen networkResponse und einer benutzerdefinierten Nachricht zu erstellen. – fiipi
Es ist nicht unmöglich, es erfordert nur eine Unterklasse VolleyError-Implementierung, und in vielen Fällen ist die Überprüfung der Unterklasse Ihres VolleyError in onErrorResponse (VolleyError e) sowieso notwendig. – Submersed