###前提・実現したいこと
ボタンをクリックすると、まず確認ダイアログが表示される。
「実行する」を選択すると処理中ダイアログが表示され、
バックグラウンドで時間の掛かる処理が実行される。
一定時間内に処理が終わらないと、タイムアウトとなる。
これを実現するため、以下のコードを書きました。
###該当のソースコード
Java
1 public void onButtonClick(View view) { 2 new AlertDialog.Builder(this) 3 .setTitle("タイトル") 4 .setMessage("実行します。よろしいですか?") 5 .setPositiveButton("OK", new DialogInterface.OnClickListener() { 6 // OKタップ時 7 @Override 8 public void onClick(DialogInterface dialog, int which) { 9 10 // 処理中ダイアログ表示 11 ProgressDialog progressDialog = new ProgressDialog(Main1Activity.this); 12 progressDialog.setMessage("処理中です..."); 13 progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 14 progressDialog.setCanceledOnTouchOutside(false); 15 progressDialog.show(); 16 17 // ここで処理を行う 18 try { 19 ExecutorService service = Executors.newSingleThreadExecutor(); 20 Future<String> future = service.submit(new Callable<String>() { 21 @Override 22 public String call() throws Exception { 23 String ret = ""; 24 25 // 時間の掛かる処理 26 for (int i = 0; i < 500000000; i++) { 27 // 割り込みがあったら中断 28 if (Thread.interrupted()) { 29 throw new InterruptedException(); 30 } 31 32 ret = ret + "0"; 33 } 34 35 return ret; 36 } 37 }); 38 39 String result = future.get(30, TimeUnit.SECONDS); 40 service.shutdown(); 41 42 Toast.makeText(getApplicationContext(), "処理を完了しました", Toast.LENGTH_SHORT).show(); 43 } 44 catch (InterruptedException e) { 45 Toast.makeText(getApplicationContext(), "InterruptedException", Toast.LENGTH_SHORT).show(); 46 } 47 catch (ExecutionException e) { 48 Toast.makeText(getApplicationContext(), "ExecutionException", Toast.LENGTH_SHORT).show(); 49 } 50 catch (TimeoutException e) { 51 Toast.makeText(getApplicationContext(), "TimeoutException", Toast.LENGTH_SHORT).show(); 52 } 53 54 // 処理が終わったらダイアログを閉じる 55 if (progressDialog != null) { 56 progressDialog.dismiss(); 57 progressDialog = null; 58 } 59 60 return; 61 } 62 }) 63 .setNegativeButton("キャンセル", new DialogInterface.OnClickListener() { 64 // キャンセルタップ時 65 @Override 66 public void onClick(DialogInterface dialog, int which) { 67 Toast.makeText(getApplicationContext(), "キャンセルしました", Toast.LENGTH_SHORT).show(); 68 } 69 }) 70 .show(); 71 }
###発生している問題・エラーメッセージ
処理は実行され、一定時間でタイムアウトも発生しますが、
処理中ダイアログが表示されません。
###補足情報(言語/FW/ツール等のバージョンなど)
Android Studio 2.1.3
どこが悪いのかご教示ください。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/18 23:29