以前こちらの記事で端末内のデータをサーバに送信するためのコードを書きましたが、処理を開始してから結果が返ってくるまで若干時間がかかってしまいます。ボタンを押しても画面が白いままでは味気ないので処理中にプログレスダイアログを表示することにします。
参考にさせていただいたサイトはこちら
技術脳塗 非同期(スレッド)処理中にプログレスダイアログを表示する (シンプル)
https://sites.google.com/site/technoute/android/thread/thread_progress
上記サイト中の青文字の部分を自分のプログラムにコピペしただけで動きました。Nexus 5のエミュレータ上ではこのように表示されます。
蛇足かもしれませんがコードも載せておきます。参考サイト中のコードはとてもシンプルでわかりやすいのですが、そこから更にプログレスダイアログ以外の部分を削げ落としております。とりあえず動かしたい人向けです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
public class UploadAsyncTask extends AsyncTask<String, Void, String> { private Activity m_Activity; public ProgressDialog m_ProgressDialog; public UploadAsyncTask(Activity activity) { // 呼び出し元のアクティビティ m_Activity = activity; } /* * 実行前の事前処理 */ @Override protected void onPreExecute() { // プログレスダイアログの生成 this.m_ProgressDialog = new ProgressDialog(this.mainActivity); // プログレスダイアログの設定 this.m_ProgressDialog.setMessage("実行中..."); // メッセージをセット // プログレスダイアログの表示 this.m_ProgressDialog.show(); return; } @Override protected String doInBackground(String... ImagePath) { //ここにバックグラウンドで行う処理を書く } @Override protected void onPostExecute(String result) { //ここにdoInBackground終了後に行う処理を書く // プログレスダイアログを閉じる if (this.m_ProgressDialog != null && this.m_ProgressDialog.isShowing()) { this.m_ProgressDialog.dismiss(); } } /* * キャンセル時の処理 */ @Override protected void onCancelled() { super.onCancelled(); Log.v("AsyncTaskProgressDialogSimpleThread", "onCancelled()"); if (this.m_ProgressDialog != null) { Log.v("this.m_ProgressDialog.isShowing()", String.valueOf(this.m_ProgressDialog.isShowing())); // プログレスダイアログ表示中の場合 if (this.m_ProgressDialog.isShowing()) { // プログレスダイアログを閉じる this.m_ProgressDialog.dismiss(); } } return; } } |