【问题标题】:Android - loopj async task cancelAndroid - loopj 异步任务取消
【发布时间】:2014-02-15 10:01:48
【问题描述】:

我正在使用 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);
    }
    });

}

【问题讨论】:

    标签: android web-services android-asynctask


    【解决方案1】:

    请看AsyncHttpClient类方法的这个方法:cancelRequest()

    您可以取消与Context 关联的任何挂起(如果正在运行则中断)请求。 这意味着您必须在请求中传递Context,否则它们将不会被取消。

    【讨论】:

    • 感谢您的回答。我需要把这个句柄请求放在哪里?在 OnStart 中?
    • 这取决于您的应用设计以及您要取消请求的位置。它可能是当你进入时,甚至是离开屏幕时更好,所以在你的 Activity 的 onStop 方法中。或者,在您使搜索操作无效的任何时候,在开始新请求之前,您可以取消任何以前的请求。一个简单的 client.cancelRequest(...)。如果您还没有这样做,我建议将库作为静态 HTTP 客户端进行管理,如主页中所述:loopj.com/android-async-http
    • 所以我需要将 onCreate 方法上的客户端初始化为静态并执行所有其他活动吗?
    • 如示例中,在您的项目中创建一个单独的类。如您所见,客户端是在内部创建的并且是私有的。然后你有包装客户端功能的公共方法(get,post,...)。在您的代码中直接使用这些方法。就像 MyClient.get(...) 一样,其中 MyClient 是您的班级名称(在示例中是 Twitter...)。
    • 与上下文关联的请求是什么意思?你愿意解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多