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!
source to share
No one has answered this question yet
Check out similar questions: