为了拥有可以取消的同步版本的
AsyncHttpClient
,我在主线程上处理所有操作。之前我是在
AsyncTask
中运行它,一旦调用了
AsyncHttpClient.post()
,
AsyncTask
就会结束,我无法跟踪
AsyncHttpClient
实例。
SyncHttpClient
不允许我取消上传,所以我知道必须使用AsyncHttpClient
并进行适当的更改。
以下是我用于上传文件的类,它使用AsyncHttpClient
并允许取消:
public class AsyncUploader {
private String mTitle;
private String mPath;
private Callback mCallback;
public void AsyncUploader(String title, String filePath, MyCallback callback) {
mTitle = title;
mPath = filePath;
mCallback = callback;
}
public void startTransfer() {
mClient = new AsyncHttpClient();
RequestParams params = new RequestParams();
File file = new File(mPath);
try {
params.put("title", mTitle);
params.put("video", file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
mClient.setTimeout(50000);
mClient.post(mContext, mUrl, params, new ResponseHandlerInterface() {
@Override
public void sendResponseMessage(HttpResponse response) throws IOException {
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
mCallback.uploadComplete();
}
}
@Override
public void sendProgressMessage(int bytesWritten, int bytesTotal) {
mCallback.progressUpdate(bytesWritten, bytesTotal);
}
@Override
public void sendFailureMessage(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
mCallback.failedWithError(error.getMessage());
}
});
}
public void cancel() {
mClient.cancelAllRequests(true);
}
}
这是运行它的方法:
AsyncUploader uploader = new AsyncUploader(myTitle, myFilePath, myCallback);
uploader.startTransfer();
要取消上传,只需调用cancel()
方法,如下所示:
uploader.cancel();