2011-08-15 135 views
23

我想在後臺任務完成時執行Toast,只是爲了讓用戶知道它已完成。如何將上下文傳遞給AsyncTask?

我做了一個新的類爲我的AsyncTask,但我不能在該類別中使用getApplicationContext()

我使用task.execute(getTempFile(this), getApplicationContext());運行的任務。 getTempFile返回一個File對象,我試圖將上下文作爲Context對象傳遞。

我的任務類有3個變量AsyncTask<Object, Integer, Integer>所以上下文處於第二對象。但是,這會使應用程序崩潰。

編輯

public class LocationActivity extends Activity implements LocationListener { 
    protected void handleImage(Bitmap thumbnail){ 
     PushDataToServer task = new PushDataToServer(); 
     task.execute(getTempFile(this), getApplicationContext()); 
    } 
} 




public class PushDataToServer extends AsyncTask<Object, Integer, Integer> { 

    Context context; 

    @Override 
    protected Integer doInBackground(Object... params) { 
     // TODO Auto-generated method stub 
     this.context = (Context) params[1]; 
     File file = (File) params[0]; 
     return null; 
    } 

    protected void onPostExecute(String result) { 
     Toast toast = Toast.makeText(this.context, "All done!", Toast.LENGTH_SHORT); 
     toast.show(); 
    } 

} 
+0

請發表您的AsyncTask類和主類的骨架:) – Codeman

+0

用代碼示例更新了我的問題。 – dotty

回答

75

傳遞一個Context對象到AsyncTask的構造。

示例代碼:

public class MyTask extends AsyncTask<?, ? ,?> { 
    private Context mContext; 

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

,然後,當你構建你的AsyncTask

MyTask task = new MyTask(this); 
task.execute(...); 
+0

吐司永遠不會顯示。任何其他想法? – dotty

+0

當您在UI線程上運行的函數中調用'show()'時,應該顯示'Toast'。你確定這是事實嗎? – Wroclai

+0

Toast在我的onPostExecute()方法中。代碼示例如上所示。 – dotty

0

你說你的背景是在第二個對象,但是你的第二個目的是整數。這可能是你的問題嗎?另外 - 另一個建議是把你的AsyncTask類作爲一個私有的內部類到你的活動 - 這樣我確信你將有權訪問getApplicationContext()。

2

通過它在構造函數中,而不是作爲方法參數。那麼你不需要依賴通用參數。

相關問題