我试图获取名为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"
答案 0 :(得分:166)
您需要做以下事情。
实施例
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();
}