簡體   English   中英

等待異步任務完成

[英]Waiting for an Async task to complete

我有三節課

  1. A類(擴展活動。這是主要活動)
  2. B類(擴展異步。用於登錄)
  3. C類(擴展活動。B類的異步任務完成后,將調用該類)

在我的主要活動(A)中,我正在執行B類的登錄方法。 這些登錄方法運行后,我想打開第二個活動,即C類。由於B類運行C類,我現在無法執行此操作。 我需要它來等待異步任務完成。

有誰知道如何實現這一目標? 我已經搜索過了,從我收集到的信息來看,人們並沒有嘗試使用與我相同的類結構來做這件事,這會使事情有所改變。

謝謝

有誰知道如何實現這一目標?

從B的onPostExecute()啟動C。

因為B類不會擴展活動

您的AsyncTask應該由保留的片段管理,因此它可以在配置更改中正常工作。 使AsyncTask成為該保留片段的常規內部類,因此它可以從onPostExecute()安全地調用getActivity() onPostExecute() ,並且可以在其上調用startActivity()

如果希望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();

使B成為A的內部類,然后從onPostExecute啟動C。 由於B是A的內部類,因此您將可以訪問A中的所有內容。

在擴展了asynctask的類的postExecute中編寫下一個活動的代碼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM