Create a custom retrofit callback

I am using Retrofit and Otto in my webservice call application. I want to assign an ID for every request made, so I made a custom Retrofit callback like this

public class RetrofitCallback<T> implements Callback<T> {

    private static int _idCounter = 1;

    public int requestId;
    private Bus eventBus;

    public RetrofitCallback(Bus eventBus){
        this.requestId = _idCounter;
        this.eventBus = eventBus;
        _idCounter++;
    }

    @Override
    public void success(T data, Response response) {
        // problem.. data is not the type I expected. please see below
        RetrofitRequestSuccess<T> message = new RetrofitRequestSuccess<>(requestId, 
           data, response);
        eventBus.post(message);
    }

    @Override
    public void failure(RetrofitError error) {
        RetrofitRequestFailed message = new RetrofitRequestFailed(requestId, error);
        eventBus.post(message);
    }
}

      

RetrofitRequestSuccess Class

public class RetrofitRequestSuccess<T> {
    public T data;
    public int requestId;
    public Response response;

    public RetrofitRequestSuccess(int requestId, T data, Response response) {
        this.requestId = requestId;
        this.data = data;
        this.response = response;
    }
}

      

Then I use the callback like this

int requestId = 0; // activity level scope

RestAdapter restApiAdapter = new RestAdapter.Builder().setEndpoint(ENDPOINT).build();
RestAPI restClient = restApiAdapter.create(RestAPI.class);
RetrofitCallback<List<Order>> callback = new RetrofitCallback<>(BusProvider.getBus());
restClient.getOrders(callback);
requestId = callback.requestId;

      

Otto signed method

@Subscribe
public void onHttpResponseReceived(RetrofitRequestSuccess message) {
    if(message.requestId == requestId) {
        List<Order> ordersList = (ArrayList<Order>) message.data;
    }
}

      

The problem is that I never get the Object List Order

in message.data

. No matter what type I pass when creating the callback message.data

always contains List of Gson objects LinkedTreeMap

. How can I get it to return the correct type? Any help would be greatly appreciated!

+3


source to share





All Articles