gpt4 book ai didi

android - 改造 + Okhttp 取消操作不起作用

转载 作者:可可西里 更新时间:2023-11-01 18:47:28 25 4
gpt4 key购买 nike

我正在像这样在我的应用程序中使用改造

 final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.interceptors().add(new YourInterceptor());

final OkClient okClient = new OkClient(okHttpClient);
Builder restAdapterBuilder = new RestAdapter.Builder();
restAdapterBuilder.setClient(okClient).setLogLevel(LogLevel.FULL)
.setEndpoint("some url");
final RestAdapter restAdapter = restAdapterBuilder.build();


public class YourInterceptor implements Interceptor {

@Override
public Response intercept(Chain chain) throws IOException {
// TODO Auto-generated method stub
Request request = chain.request();

if (request != null) {
Request.Builder signedRequestBuilder = request.newBuilder();
signedRequestBuilder.tag("taggiventorequest");
request = signedRequestBuilder.build();
request.tag();
}
return chain.proceed(request);
}
}

发送请求后我打电话

okHttpClient.cancel("taggiventorequest");

但是请求没有取消,我得到了改造的回应不知道为什么它不取消我的请求

我需要像取消改造一样的截击

最佳答案

作为Retrofit API Spec , 取消请求将包含在 2.0 版本中。

cancel() is a no-op after the response has been received. In all other cases the method will set any callbacks to null (thus freeing strong references to the enclosing class if declared anonymously) and render the request object dead. All future interactions with the request object will throw an exception. If the request is waiting in the executor its Future will be cancelled so that it is never invoked.

目前,您可以通过创建自定义回调类来实现,该回调类实现了改造后的回调。

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);
}

在 Activity 或 Fragment 中,

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();

这是取消每个请求的简单示例。您可以通过创建回调管理器类同时处理(取消、暂停、恢复)两个或多个请求。请看that comment供引用。

希望对你有用。

关于android - 改造 + Okhttp 取消操作不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31474742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com