webentwicklung-frage-antwort-db.com.de

Wie bekomme ich eine Ausnahmebedingung für die Nachrüstung?

Ich versuche, eine Verbindung zum Restdienst über eine Nachrüstung in der Android) -Anwendung herzustellen. Ich erhalte Antworten. Wenn jedoch eine Fehlerantwort vom Dienst vorliegt, tritt eine Konvertierungsausnahme auf, und jetzt möchte ich einige Aktionen ausführen basierend auf dem Antworttext. Aber ich erhalte den Antworttext als NULL. Aber das Retrofit-Protokoll hat eine Fehlermeldung. Warum passiert das?.

D/Reftofit log(24856): OkHttp-Received-Millis: 1397527055676
D/Reftofit log(24856): OkHttp-Response-Source: NETWORK 200
D/Reftofit log(24856): OkHttp-Sent-Millis: 1397527055492
D/Reftofit log(24856): Server: Apache/2.2.22 (Ubuntu)
D/Reftofit log(24856): X-Powered-By: PHP/5.3.10-1ubuntu3.10
D/Reftofit log(24856): {"result":"Invalid Token ID"}

Code:

public void failure(RetrofitError retrofitError) {
    String response = null;
    TokenError tokenError = (TokenError) retrofitError.getBodyAs(TokenError.class);
    response = tokenError.getErrorDetails();
    Log.e(TAG, response);
    if (response != null && response.contains("Invalid Token ID")) {
        GroupDataProvider.getInstance().onFailure();
    }

}

Hier bekomme ich tokenError als null. Ich weiß nicht warum? Muss ich etwas mit Restadapter einstellen, damit die Antwort an Nachrüstfehlerobjekt weitergeleitet wird.

36

Versuchen Sie diesen Code:

@Override
public void failure(RetrofitError error) {
    String json =  new String(((TypedByteArray)error.getResponse().getBody()).getBytes());
    Log.v("failure", json.toString());
}

mit Retrofit 2.

@Override
public void onFailure(Call<Example> call, Throwable t) {
    String message = t.getMessage();
    Log.d("failure", message);
}
73
Cabezas

wenn Fehler im String-Format:

public Sring getErrorBodyAsString(RetrofitError error) {    
      return (String) error.getBodyAs(String.class)
}

wenn Sie ein benutzerdefiniertes Objekt benötigen:

class ErrorResponse {
   @SerializedName("error")
   int errorCode;

   @SerializedName("msg")
   String msg;
}

public T getErrorBody(RetrofitError error, Class<T> clazz) {    
      return (T) error.getBodyAs(clazz);
}
5

Ihr Server sollte 4xx HTTP-Fehlercode zurückgeben, damit dies funktioniert.

Wenn Ihr Server HTTP 200 zurückgibt, bedeutet dies, dass die Antwort erfolgreich ist und mit dem Zweig onSuccess verarbeitet wird. Wahrscheinlich sollte Ihr Objekt, das Sie an Callback<Object> Übergeben, bereit sein, sowohl das Erfolgs- als auch das Fehlerergebnis zu verarbeiten.

Um sicherzustellen, dass dies der Fall ist, können Sie überprüfen, ob RetrofitError tatsächlich ein JsonParseException ist, indem Sie das folgende Snippet hinzufügen:

public void failure(RetrofitError error) {
    Log.v(TAG, error.getMessage());
};
3

sie benötigen dafür getErrorStream ().

Wenn die HTTP-Antwort angibt, dass ein Fehler aufgetreten ist, löst getInputStream () eine IOException aus. Verwenden Sie getErrorStream (), um die Fehlerantwort zu lesen. Die Header können auf normale Weise mit getHeaderFields () gelesen werden.

Ref: Github-Problem

0
LOG_TAG