Trong lập trình android sử dụng thư viện Retrofit, bạn có thể xử lý mã lỗi và lỗi mạng trong phản hồi của mình bằng cách sử dụng các khái niệm như Interceptor
và Callback
. Dưới đây là một hướng dẫn cơ bản về cách xử lý lỗi trong Retrofit:
- Xử lý lỗi mạng: Khi có lỗi mạng như không có kết nối, thời gian chờ quá lâu hoặc lỗi DNS, Retrofit sẽ ném một
IOException
. Bạn có thể bắt ngoại lệ này trong phần gọi API và thực hiện xử lý tùy ý. Ví dụ:
java
Call<YourResponse> call = apiService.yourApiMethod();
call.enqueue(new Callback<YourResponse>() {
@Override
public void onResponse(Call<YourResponse> call, Response<YourResponse> response) {
// Xử lý phản hồi thành công
}
@Override
public void onFailure(Call<YourResponse> call, Throwable t) {
if (t instanceof IOException) {
// Xử lý lỗi mạng
} else {
// Xử lý các lỗi khác
}
}
});
- Xử lý mã lỗi HTTP: Retrofit sử dụng thư viện Converter để chuyển đổi phản hồi từ dạng tệp JSON/XML thành đối tượng Java. Khi một mã lỗi HTTP trả về (ví dụ: 404 Not Found, 500 Internal Server Error), Retrofit sẽ tự động gọi callback
onResponse
và chuyển đối tượng lỗi tương ứng. Bạn có thể sử dụngResponse.errorBody()
để nhận được đối tượngResponseBody
chứa chi tiết lỗi. Ví dụ:
java
Call<YourResponse> call = apiService.yourApiMethod();
call.enqueue(new Callback<YourResponse>() {
@Override
public void onResponse(Call<YourResponse> call, Response<YourResponse> response) {
if (response.isSuccessful()) {
// Xử lý phản hồi thành công
} else {
ResponseBody errorBody = response.errorBody();
// Xử lý mã lỗi HTTP và errorBody
}
}
@Override
public void onFailure(Call<YourResponse> call, Throwable t) {
// Xử lý lỗi mạng
}
});
- Sử dụng Interceptor: Bạn có thể sử dụng
Interceptor
để kiểm soát quá trình gửi và nhận phản hồi từ máy chủ. Interceptor cho phép bạn kiểm tra và chỉnh sửa các yêu cầu và phản hồi trước khi chúng được gửi và nhận. Bạn có thể sử dụng Interceptor để thêm thông tin header, thay đổi URL, hoặc xử lý các lỗi khác. Ví dụ:
java
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// Thêm header vào yêu cầu
request = request.newBuilder()
.header("Authorization", "Bearer token")
.build();
Response response = chain.proceed(request);
// Xử lý các lỗi khác
return response;
}
})
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
Bằng cách sử dụng các kỹ thuật này, bạn có thể xử lý các mã lỗi và lỗi mạng trong phản hồi của Retrofit một cách linh hoạt và tùy chỉnh theo yêu cầu của ứng dụng của mình.