如何将AppDelegate引用从活动传递到异步任务?

时间:2011-09-06 00:51:26

标签: android

我正在努力减少我的活动类(Android)中的噪音,我首先要解决的是我作为内部类的异步任务。我遇到的唯一问题是,一旦移出,我就无法将AppDelegate ref从活动传递给异步任务。

这是我(失败)的尝试

//这里我从活动

传递了参考
public class HelloAndroidActivity extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        GetSessionsAsyncTask task = new GetSessionsAsyncTask(HelloAndroidActivity.this, getApplicationContext());
        task.execute();
    }
}

//在这里我将它推送到一个字段以便稍后使用它(但是在这个obj的init期间它失败了)

public class GetSessionsAsyncTask extends AsyncTask<String, Void, List<Session>> {
    private Activity activity;
    private AppDelegate delegate;

    public GetSessionsAsyncTask(Activity activity, Context context) {
        this.activity = activity;
        this.delegate = (AppDelegate) context;
    }
}

修改

我上面提到的app委托只是扩展应用程序(android类)

public class AppDelegate extends Application {
}

2 个答案:

答案 0 :(得分:1)

一些事情:

  1. '但是在这个obj初始化期间失败了'是什么?你有例外吗?如果有,那是什么?后堆栈跟踪。
  2. 您可以从活动(第一个参数)获取应用程序,因此您不需要构造函数的第二个参数。如果您想保留它,请将其更改为比Context更具体的内容(请注意,AppDelegateApplicationContext
  3. 您可能希望从onStart()而不是onCreate()执行任务,以确保在启动任务之前您的活动已正确初始化。

答案 1 :(得分:1)

您需要将AppDelegate声明为Manifest中的Application类:

<application android:name=".AppDelegate" ... >
    ...
</application>