android - 如何从 ASyncTask 调用父 Activity 函数?

标签 android android-asynctask accountmanager

setAccountAuthenticatorResult 可以从扩展AccountAuthenticatorActivity 的Activity 中调用。我的 Activity 扩展了它,但启动了 ASyncTask,因此应该从 ASyncTask 调用这个 setAccountAuthenticatorResult(或者,应该将 ASyncTask 的结果传递回主线程)。

怎么做?

下面的代码有什么问题?

AsyncTask<Uri, Void, Bundle> task = new RetrieveAccessTokenTask(this, consumer, provider, prefs).execute(uri);

public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Bundle> {
    private Context context;

    public RetrieveAccessTokenTask(Context context, OAuthConsumer consumer,
            OAuthProvider provider, SharedPreferences prefs) {
        this.context = context;
    }

    @Override
    protected void onPostExecute(Bundle result) {
        context.setAccountAuthenticatorResult(); // doesn't work

    }

最佳答案

当你创建 AsyncTask 时,你可以给它添加一个新的构造函数,并传入一个对 Activity 的引用:

AsyncTask myTask = new MyTask(this);

然后从 AsyncTask 中的 onPostExecute() 方法就可以调用 Activity 上的方法了。

public class MyTask extends AsyncTask<String, String, String>
{
    public MyActivity activity;

    public MyTask(MyActivity a)
    {
        this.activity = a;
    }

    //  ......

    protected void onPostExecute(String result)
    {
        activity.myMethod();
    }
}

关于android - 如何从 ASyncTask 调用父 Activity 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5523438/

相关文章:

Android Holo 选中列表项颜色

java - 即使 php 代码正在运行,也无法从 MySQL 加载我的数据?

android - 使用 Android AccountManager 进行第三方 OAuth2 授权

android - 如何更改操作栏选项卡中的选项卡背景颜色

android - Firebase Facebook 和 Google 登录

java - 错误致命异常 : AsyncTask #1 android

android - 是否有必要在 AsyncTask 中访问 SQLiteDatabase?

android - 客户经理为 com.google 返回空值

android - 如何让 Android 将应用程序数据存储在用户的 Google 帐户中,以便在新设备上安装时恢复

android - Google Analytics for Apps 上的屏幕显示时间和 session 持续时间有什么区别?