在AsyncTask中获取上下文

时间:2013-06-04 14:51:04

标签: android android-asynctask toast android-context

我试图获取名为Opciones的类的AsyncTask中的上下文(这个类是唯一一个调用该任务的类)但我不知道该怎么做,我看到了这样的代码:

      protected void onPostExecute(Long result) {

    Toast.makeText(Opciones.this,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show(); 
}

但它对我不起作用,它说:"No enclosing instance of the type Opciones in scope"

4 个答案:

答案 0 :(得分:166)

您需要做以下事情。

  • 如果您想使用 AsyncTask ,请在其他课程中将其扩展为 MyCustomTask
  • 在新课程的构造函数中,传递上下文

实施例

public class MyCustomTask extends AsyncTask<Void, Void, Long> {

    private Context mContext;

    public MyCustomTask (Context context){
         mContext = context;
    }

    //other methods like onPreExecute etc.
    protected void onPostExecute(Long result) {
         Toast.makeText(mContext,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show(); 
    }
}

通过以下方式实例化课程。

MyCustomTask task = new MyCustomTask(context);
task.execute(..);

答案 1 :(得分:43)

保持对主机Activity的弱引用将防止内存泄漏。

packageInfo

答案 2 :(得分:13)

由于只有一个Activity使用此任务,因此只需将其设为Activity的内部类

public class Opciones extends Activity
{
     public void onCreate()
     {
         ...
     }

    public class MyTask extends AsyncTask<>
    {
        ...

         protected void onPostExecute(Long result) {
        Toast.makeText(Opciones.this,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show(); 
     }
}

然后您可以访问Activity及其Context

的成员变量

答案 3 :(得分:-5)

你可以写getApplicationContex()。要么 定义全局变量。

Activity activity;

并在onCreate()函数

activity = this;

然后,

 protected void onPostExecute(Long result) {

    Toast.makeText(activity,"Subiendo la foto. ¡Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show(); 
}