Mor*_*zov 11 java android retrofit
我滚动浏览Retrofit 的官方文档,并决定在我的项目中实现类似的东西,这样用户总是可以选择取消下载文件,一切都能正常工作.实施适当的方法,如果未能规定以下内容:
service.upload1(file1, str, stringMap, new Callback<ImageUpload>() {
@Override
public void success(final ImageUpload imageUpload, Response response) {
mRecyclerView.post(new Runnable() {
@Override
public void run() {
...
});
}
@Override
public void failure(RetrofitError error) {
if (error.isCanceled()) {
Log.e(TAG, "request is cancelled");
} else {
Log.e(TAG, "other larger issue, i.e. no network connection?");
}
}
Run Code Online (Sandbox Code Playgroud)
但是红色的下划线是失败的方法.我不明白是什么问题,因为这个方法我们最初提出类Call(也许是因为发誓我而不是类Call是RetrofitError?)请告诉我如何修复.我使用改装1.9,我不需要继续改造2.
Ami*_*ari 19
error.isCanceled()据我所记,在改造中似乎并不存在.如果您希望能够取消请求,您可以切换到他们有call.cancel()方法的Retrofit 2,或者在当前版本的Retrofit中,您可以Callback扩展类以创建您自己的类,CancellableCallback如下所示:
public class CancellableCallback<T> implements Callback<T> {
private Callback<T> callback;
private boolean canceled;
private CancellableCallback() {}
public CancellableCallback(Callback<T> callback) {
this.callback = callback;
canceled = false;
}
public void cancel() {
canceled = true;
callback = null;
}
@Override
public void success(T o, Response response) {
if (!canceled) {
callback.success(o, response);
}
}
@Override
public void failure(RetrofitError error) {
if (!canceled) {
callback.failure(error);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
然后你可以像这样使用它:
CancellableCallback callback = new Callback<ImageUpload>() {
@Override
public void success(final ImageUpload imageUpload, Response response) {
mRecyclerView.post(new Runnable() {
@Override
public void run() {
...
});
}
@Override
public void failure(RetrofitError error) {
}
};
service.upload1(file1, str, stringMap, callback);
Run Code Online (Sandbox Code Playgroud)
然后像这样取消它:
if (some condition && callback != null) {
callback.cancel();
}
Run Code Online (Sandbox Code Playgroud)
Pra*_*ani 12
你可以取消请求,如:
// something happened, for example: user clicked cancel button
service.cancel();
Run Code Online (Sandbox Code Playgroud)
并得到取消的回调像:
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
if (call.isCanceled()) {
Log.e(TAG, "request was cancelled");
}
else {
Log.e(TAG, "other larger issue, i.e. no network connection?");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在这里查看更多信息.
| 归档时间: |
|
| 查看次数: |
17842 次 |
| 最近记录: |