Android等待任务完成

我有一个函数,AppHelper.isOnline(Context Context),我调用应用程序的各个部分来检查会话在发出HTTP请求之前是否没有超时

公共void onClick(视图v){
意向=无效;
开关(v.getId()){
案例R.id.ButtonPagamanti:
if(AppHelper.isOnline(this))
{
//这里AppHelper.isOnline应该已经完成了它的异步任务
意图=新意图(此,OrdineCreaActivity.class);
此.startActivityForResult(intent,R.id.buttonPagamenti);
}
打破
...

AppHelper.isOnline()中,我正在执行一个登录的AsyncTask,从而发出一个网络请求,该请求无法在UI上运行,因为否则我会得到一个异常。我需要等待它完成,然后使用if中的代码恢复。我如何才能做到这一点

问题是活动首先启动,然后执行AsyncTask,因此当活动需要有效的登录会话时,它会中断

您有两个选择:

使用AsyncTask的方法get(长超时,时间单位)如下:

任务.get(1000,时间单位.毫秒);

这将使您的主线程最多等待1000毫秒AsyncTask的结果(根据@user1028741注释:实际上还有一个infinetly-waiting方法-AsyncTask#get(),在某些情况下也可能为您完成这项工作)

或者,您可以在异步任务中显示一个进度对话框,直到它完成。查看此线程(无需复制代码)。基本上,异步任务运行时会显示进度对话框,完成时会隐藏进度对话框

您甚至还有第三个选项:“如果线程足以满足您的需要,您可以使用它的加入方法。但是,如果任务需要很长时间,您仍然需要显示进度对话框,否则您将因主线程太长时间处于非活动状态而获得异常

发表评论