Android - loopj异步任务取消

3
我正在使用Android loopj Async Task从服务器访问数据。
我尝试在autocompleteText视图上实现这一点,即当用户键入时,它将在我的数据库中搜索并使用适配器在ListView中列出结果。所有都运行良好。
但是,当新任务运行时,我需要取消所有先前的请求。也就是说,如果用户键入“che”,则会运行新的AsyncHttpClient并启动Web服务,然后用户键入“chem”,则需要取消所有先前/正在运行的AsyncHttpClients。
有什么想法吗?
以下是我的代码:
public void getValues(String movie){
AsyncHttpClient client = new AsyncHttpClient();
RequestParams webparams = new RequestParams();
webparams.put("fn", "searchMovies"); 
webparams.put("movie", movie);


client.post(domain, webparams, new AsyncHttpResponseHandler() {

    @Override
    public void onStart() {

    }

    @Override
    public void onSuccess(String response) {
        //dialog.dismiss();

        try {

            JSONObject obj = new JSONObject(response);
            ...
            ...
             }

            catch {}


    @Override
    public void onFailure(Throwable e, String response) {
        Toast.makeText(SearchActivity.this,"Error Occured ! Please try again.",Toast.LENGTH_SHORT).show();
        cd.goHome(SearchActivity.this);
    }
    });

}
1个回答

6
请查看 AsyncHttpClient 类的 cancelRequest() 方法:cancelRequests()
您可以取消与该 Context 相关联的任何待处理请求(如果正在运行,则中断它们)。这意味着您必须在请求中传递一个 Context,否则它们将无法被取消。

谢谢您的回答。我需要把这个处理请求放在哪里?在OnStart中吗? - ramesh
这取决于您的应用程序设计和您想要取消请求的位置。它可以在进入或更好的离开屏幕时进行,因此在Activity的onStop方法中进行。或者,在开始新请求之前,您可以在使搜索操作无效之前取消任何先前的请求。一个简单的client.cancelRequest(...)。如果您还没有这样做,我建议将库管理为静态HTTP客户端,如主页http://loopj.com/android-async-http/所述。 - fasteque
所以我需要在onCreate方法中将客户端初始化为静态并完成所有其他活动,对吧? - ramesh
就像示例中一样,在您的项目中创建一个单独的类。正如您所看到的客户端是在内部创建的并且是私有的。然后,您可以使用公共方法包装客户端功能(获取、发布等)。在您的代码中直接使用这些方法。例如,MyClient.get(...) 其中 MyClient 是您的类名(在示例中为 Twitter...)。 - fasteque
一个与上下文相关联的请求是什么意思?你能解释一下吗? - DYS
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接