質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

6447閲覧

タイムアウト付きの処理中に処理中ダイアログを表示したい

teretail

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2017/01/16 16:51

###前提・実現したいこと
ボタンをクリックすると、まず確認ダイアログが表示される。
「実行する」を選択すると処理中ダイアログが表示され、
バックグラウンドで時間の掛かる処理が実行される。
一定時間内に処理が終わらないと、タイムアウトとなる。

これを実現するため、以下のコードを書きました。

###該当のソースコード

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

どこが悪いのかご教示ください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

AsyncTaskを使うといい感じで実装できると思います。

投稿2017/01/17 11:54

shivar

総合スコア74

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teretail

2017/01/18 23:29

お返事遅くなってしまい、すみません。 ご回答ありがとうございます。 まだ組めてないので、確認でき次第ご報告致します。
guest

0

表示の処理と非表示の処理が連続して書かれているので、ダイアログは表示してすぐに非表示されています。

非表示の処理はタイムアウト、または処理の完了時に実行するように修正しましょう。

投稿2017/01/16 17:01

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teretail

2017/01/18 23:28

お返事遅くなってしまい、すみません。 ご回答ありがとうございます。 for分の後、catchの中にdismiss()を移しましたが、やはり表示されませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問