2011-08-15 9 views
23

バックグラウンドタスクが完了したら、完了したことをユーザーに知らせるために、Toastを実行します。コンテキストをAsyncTaskに渡すにはどうすればよいですか?

私はasyncTaskの新しいクラスを作成しましたが、このクラスではgetApplicationContext()を使用できません。

私はtask.execute(getTempFile(this), getApplicationContext());を使用してタスクを実行しています。 getTempFileはFileオブジェクトを返し、コンテキストをContextオブジェクトとして渡そうとしていました。

My Taskクラスには3つの変数AsyncTask<Object, Integer, Integer>があるため、コンテキストは2番目のオブジェクトにあります。ただし、アプリケーションがクラッシュします。

編集

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

AsyncTaskのコンストラクタにContextオブジェクトを渡します。

サンプルコード:

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

'Toast'は、UIスレッドで実行される関数で' show() 'を呼び出すときに表示されるはずです。これが本当ですか? – Wroclai

+0

トーストは私のonPostExecute()メソッドにあります。コードサンプルは上記のとおりです。 – dotty

0

あなたのコンテキストが第二の目的である、まだ第2の目的は、整数であると言います。これはあなたの問題だろうか?また、AsyncTaskクラスを自分のアクティビティにプライベートな内部クラスとして配置することをお勧めします。そうすれば、getApplicationContext()へのアクセス権があることになります。

2

メソッドパラメータとしてではなく、コンストラクタで渡します。次に、汎用パラメータに依存する必要はありません。

関連する問題