在Retrofit的响应处理中,如果发生错误,就会抛出异常而不是返回响应结果。这可能导致开发者困惑,因为他们希望返回的是响应结果而不是异常。下面是一个具体的代码示例,展示如何处理这个问题:
Call call = service.getData();
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if(response.isSuccessful()) {
// Handle success
ResponseBody responseBody = response.body();
// Do something with the response body
} else {
// Handle error
try {
String errorBody = response.errorBody().string();
Log.d(TAG, "Error Body: " + errorBody);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call call, Throwable t) {
// Handle failure
t.printStackTrace();
}
});
在这个示例代码中,我们使用call.enqueue()
方法来异步执行网络请求,并通过响应处理器处理响应结果。在响应处理器的onResponse()
方法中,我们首先检查响应是否成功,如果成功则处理响应体;如果失败,则通过response.errorBody()
方法获取错误响应体,并将其打印在日志中。在onFailure()
方法中,我们处理网络请求失败的情况。
如果你希望在请求失败时抛出异常而不是返回错误响应体,则可以在请求时使用throwExceptionOnFailure(true)
方法,如下所示:
Call call = service.getData();
call.throwExceptionOnFailure(true);
try {
Response response = call.execute();
if(response.isSuccessful()) {
// Handle success
ResponseBody responseBody = response.body();
// Do something with the response body
}
} catch (IOException e) {
e.printStackTrace();
}
在这个示例代码中