Ответ 1
В качестве Retrofit API Spec, запрос на отладку будет включен в версию 2.0.
cancel() является no-op после получения ответа. Во всех других случае метод будет устанавливать любые обратные вызовы в null (таким образом, освобождая сильные ссылки на охватывающий класс, если объявлены анонимно) и рендеринг объект запроса мертв. Все будущие взаимодействия с запросом объект будет генерировать исключение. Если запрос ожидает в исполнитель, его Будущее будет отменено, чтобы он никогда не вызывался.
В настоящее время вы можете сделать это, создав собственный класс обратного вызова, который реализует функцию обратного вызова после модификации.
public abstract class CancelableCallback<T> implements Callback<T> {
private boolean canceled;
private T pendingT;
private Response pendingResponse;
private RetrofitError pendingError;
public CancelableCallback() {
this.canceled = false;
}
public void cancel(boolean remove) {
canceled = true;
}
@Override
public void success(T t, Response response) {
if (canceled) {
return;
}
onSuccess(t, response);
}
@Override
public void failure(RetrofitError error) {
if (canceled) {
return;
}
onFailure(error);
}
protected abstract void onSuccess(T t, Response response);
protected abstract void onFailure(RetrofitError error);
}
MyApi.java,
private interface MyApi {
@GET("/")
void getStringList(Callback<List<String>> callback);
}
В действии или фрагменте
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(Config.URL)
.build();
MyApi service = restAdapter.create(MyApi.class);
CancelableCallback callback = new CancelableCallback<List<String>>() {
@Override
protected void onSuccess(List<String> stringList, Response response) {
for (String str : stringList) {
Log.i("Result : ", str);
}
}
@Override
protected void onFailure(RetrofitError error) {
Log.e("Error : ", error.getMessage() + "");
}
};
service.getStringList(callback);
Чтобы отменить ваш запрос, просто позвонить
callback.cancel();
Это простой пример для отмены каждого запроса. Вы можете обрабатывать (отменять, приостанавливать, возобновлять) два или более запроса одновременно, создавая класс менеджера обратного вызова. Пожалуйста, посмотрите этот комментарий для справки.
Надеюсь, это будет полезно для вас.