Gần đây tôi đã bắt đầu phát triển một ứng dụng Android và quyết định sử dụng Retrofit làm khách hàng của dịch vụ REST, nhưng tôi không chắc liệu cách tiếp cận của tôi có tốt hay không:Trang bị thêm cuộc gọi bên trong AsyncTask
i. Tôi đã thực hiện một cuộc gọi không đồng bộ đến api của tôi, được gọi bên trong phương thức doInBackground của AsyncTask. Các mối quan tâm : đọc this article khiến tôi bối rối. AsyncTask có phù hợp với loại nhiệm vụ này không? Tôi có nên gọi API trực tiếp từ Hoạt động không? Tôi hiểu rằng các phương thức gọi lại của Retrofit được thực hiện trên luồng giao diện người dùng, nhưng làm thế nào về cuộc gọi qua HTTP? Retrofit có tạo chủ đề cho điều đó không?
ii. Tôi muốn các AuthenticationResponse được lưu bên trong một đối tượng SharedPreferences, mà dường như không có sẵn bên trong phương thức thành công của cuộc gọi lại. Bất kỳ đề xuất/thực hành tốt?
Cảm ơn bạn trước :)
Dưới đây là doInBackGroundMethod tôi:
@Override
protected String doInBackground(String... params) {
Log.d(LOCATION_LOGIN_TASK_TAG, params[0]);
LocationApi.getInstance().auth(new AuthenticationRequest(params[0]), new Callback<AuthenticationResponse>() {
@Override
public void success(AuthenticationResponse authenticationResponse, Response response) {
Log.i("LOCATION_LOGIN_SUCCESS", "Successfully logged user into LocationAPI");
}
@Override
public void failure(RetrofitError error) {
Log.e("LOCATION_LOGIN_ERROR", "Error while authenticating user in the LocationAPI", error);
}
});
return null;
}
Cảm ơn câu trả lời của bạn Konrad. Tôi không chắc Retrofit đang làm gì sau hậu trường.Lúc đầu, tôi đã thực hiện cuộc gọi mạng trong AsyncTask, đó là một chút quá mức cần thiết và khó truy cập vào cá thể SharedPreferences. Câu trả lời rất hay và thông tin – user3159152
Chào mừng tôi rất vui vì tôi có thể giúp bạn. Nếu nó là hữu ích cho bạn hãy chấp nhận nó. Chỉ cần đánh dấu hộp kiểm –
giải thích rất tốt. – Andrain