I am trying to connect to rest service via retrofit in android application. I am getting responses. But when there is some error response from the service, conversion exception occurs and now I want to do some actions based on the response body. But I am getting response body as NULL. But retrofit log has a error message. Why is this happening.
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();
}
}
Here I am getting tokenError
as null
. I don't know why? Do I need to set something with rest adapter so that the response will be passed to retrofit error object.
Your server should return 4xx HTTP error code to get this working.
When your server returns HTTP 200 this mean successful response and it will be processed with
onSuccess
branch. Likely your object which you pass toCallback<Object>
should be ready to handle both success and error result.To make sure this is the case you can check if
RetrofitError
is actually aJsonParseException
by adding next snippet:you need use getErrorStream() for this.
Ref: github issue
if error in String format:
if you need custom object:
Try this code:
with Retrofit 2.0