首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UI线程等待异步结果并根据结果执行操作。

UI线程等待异步结果并根据结果执行操作。
EN

Stack Overflow用户
提问于 2013-07-11 12:15:48
回答 6查看 332关注 0票数 0

在我的android项目中,我试图调用一个返回字符串结果的web服务。执行后,将使用onPostExecution()在UI线程中更新结果,结果将决定是移动到下一个活动还是通知用户更正信息。

以上是我的意图,从下面的代码:

代码语言:javascript
复制
 BackgroundTask bcktask = new BackgroundTask();
        bcktask.execute(servicemethodname, urlparameter, bMap);
    Thread.sleep(1000);
    //do nothing
    while (backgroundResult == null)
        ;

    if (backgroundResult == "Sucessfully Registered") {
        Intent intent = new Intent(this, VerifyDetail.class);
        startActivity(intent);
    } else {
        Toast.makeText(this, backgroundResult, Toast.LENGTH_LONG)
                .show();
    }

但问题是,当我试图运行上面的代码时,它会阻塞UI线程,后台线程没有运行,或者可能没有得到执行CPU的时间。请告诉我怎么做这件事。我需要保持活动,并显示消息(什么是错误的),如果结果不是成功注册的或屏幕将更改为下一个活动。

感谢和问候,

苏拉布

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-07-11 12:27:36

您可以在任务的构造函数中添加一个回调来实现这一点。

伪码:

创建如下接口

代码语言:javascript
复制
public interface MyCallback {
    public void onResult(String result);
}

在代码中的某个位置实现此接口:

代码语言:javascript
复制
MyCallback callback = new MyCallback() {
    @Override
    public void onResult(String result) {
        if(result.equals("Sucessfully Registered") {
            // success
        } else {
            // not success
        }
    }
}

将此回调传递到任务的构造函数中,并将其存储为局部变量mCallback;

代码语言:javascript
复制
new BackgroundTask(callback).execute(...);

在onPostExecute()方法中:

代码语言:javascript
复制
mCallback.onResult("<web service result String>");

请注意,上面的内容还没有经过测试,可能包含一些小的语法错误。祝好运。

票数 0
EN

Stack Overflow用户

发布于 2013-07-11 12:24:35

在onPostExecute中执行此操作,而不是在while循环之后执行异步任务。

代码语言:javascript
复制
 protected void onPostExecute(Long result) {
     if (backgroundResult == "Sucessfully Registered") {
        Intent intent = new Intent(this, VerifyDetail.class);
        startActivity(intent);
    } else {
        Toast.makeText(this, backgroundResult, Toast.LENGTH_LONG)
            .show();
    }
}

删除会导致您的UI被击中的while循环。

票数 1
EN

Stack Overflow用户

发布于 2013-07-11 12:23:36

AsyncTask是你要找的东西!有一个例子。如果你有任何问题,请随便问!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17593133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档