等待异步任务完成

时间:2014-10-12 21:24:42

标签: java android asynchronous

我有三个班级,

  1. A类(扩展活动。这是主要活动)
  2. B类(扩展异步。用于登录)
  3. C类(扩展活动。一旦B类的异步任务完成,就会调用此方法)
  4. 在我的主要活动(A)中,我正在执行B类的登录方法。 在运行这些登录方法之后,我想打开第二个活动,即C类。我现在不能这样做,因为B类运行C类时会打开。我需要它等待Async任务完成。

    有谁知道如何实现这一目标?我已经搜索过,从我收集到的东西中,人们一直试图用与我相同的类结构来做这件事,这会改变一些事情。

    由于

4 个答案:

答案 0 :(得分:2)

  

有谁知道如何实现这一目标?

从B的onPostExecute()开始C.

  

因为B类没有扩展活动

您的AsyncTask应由保留的片段管理,以便在配置更改中正常运行。使AsyncTask成为该保留片段的常规内部类,以便它可以从getActivity()安全地调用onPostExecute(),并且可以在其上调用startActivity()

答案 1 :(得分:2)

如果您希望AsyncTask保留在单独的文件中,则需要在构造函数中获取Context。然后,在您完成登录后,您可以启动活动C.

这样的事情:

public class LoginTask extends AsyncTask<Void, Void, Void> {

    Context mContext;

    public LoginTask(Context ctx) {
        mContext = ctx;
    }


    @Override
    protected Void doInBackground(Void... voids) {
        // Login here
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        // Start Activity C
        Intent intent = new Intent(mContext, ActivityC.class);
        mContext.startActivity(intent);
    }
}

在Activity A中调用此AsyncTask,如下所示:

new LoginTask(this).execute();

答案 2 :(得分:1)

使B成为A的内部类,然后从onPostExecute开始C.由于B是A的内部类,因此您可以访问A中的所有内容。

答案 3 :(得分:0)

在扩展asynctask的类的postExecute中编写下一个活动的代码。

@Override
protected void onPostExecute()
{
   //code for changing the current activtiy    
}