Catch http response in Retrofit before passing it to the calling activity

后端 未结 2 651
南旧
南旧 2020-12-30 12:15

Right now we are using retrofit like this:

service.executeSomeRequest(UserPreferenceRequest userPreferenceRequest, new Callback         


        
2条回答
  •  不思量自难忘°
    2020-12-30 12:39

    You can combine the retrofit requests with an event bus and have a clean and centralised point for handling your responses.

    All you need to do is define a Composed object like this:

    public class GetUsers {
    // Retrofit Request
    public static final class Request {}
    
    // Retrofit Callback
    public static final class Callback 
          implements retrofit.Callback {
    
        @Override
        public void success(Response response, 
             Response retrofitResponse) {
             // .... handle the code
             BusManager.post(new Event());
        }
    
        @Override
        public void failure(RetrofitError error) {}
             BusManager.post(new RetrofitErrorEvent(error));
        }
    
    // Otto Event
    public static final class Event {}
    

    This object defines the Request, Callback and Event and this object is feed to the retrofit request.

     public void getUsers(){
         request.users(new GetUsers.Request(), new GetUsers.Callback());
     }
    

    After this, in your main class looks like this:

    public void onResume(){    
       controller.getUsers();
    }
    
    @Subscribe
    public void onGetPostsEvent(GetPosts.Event event){
        textView.setText(event.getText());
    }
    

    For a more detailed explanation check this blog post: Otto + Retrofit – An elegant solution for Web Requests and you can find a working example here

提交回复
热议问题