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

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

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

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

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

1回答

3743閲覧

runOnUiThreadの実行完了を待ちたい.

shikasama

総合スコア163

Java

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

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/01/10 05:08

###前提・実現したいこと
スレッドの中で画像データの受信とImageViewに受信した画像の表示を行っています。
UIスレッド以外ではUIをいじれないということなので、runOnUiThreadでImageViewへの表示を行っています。

画像を表示処理の完了を待ちたいのですがどのようにしたらよいのでしょうか?

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

kotlin

1Thread(Runnable { 2 while(!isStop) { 3 4 /* 5 * 画像データを受信します。 6 */ 7 receiveBuff = null 8 9 var imageData : ByteArray? = null 10 var timeout = 500 11 12 while (true) { 13 try { 14 Thread.sleep(100) 15 if(timeout < 0) { 16 break 17 } else if(receiveBuff != null) { 18 imageData = receiveBuff?.copyOf() 19 break 20 } 21 } catch (e: InterruptedException) { 22 e.printStackTrace() 23 } catch (e: Exception) { 24 e.printStackTrace() 25 } 26 27 timeout-- 28 } 29 30 this.imageData = imageData 31 32 33 /* 34 * 受信した画像データをViewに表示します。 35 */ 36 runOnUiThread { 37 var bmp : Bitmap? = null 38 var imageSize = 0 39 if(this.imageData != null) { 40 imageSize = this.imageData?.size ?: 0 41 bmp = BitmapFactory.decodeByteArray(this.imageData, 0, imageSize) 42 } 43 44 if(imageSize == 0) { 45 Toast.makeText(applicationContext, "imageData size is 0.", Toast.LENGTH_SHORT).show() 46 return@runOnUiThread 47 } 48 49 // BitmapオブジェクトをImageViewに表示 50 val iv = ivScreenImage as ImageView 51 iv.setImageBitmap(bmp) 52 53 if(iv is CustomScaleImageView) { 54 iv.fitToFitScale() 55 } 56 } 57 } 58}).start()

###試したこと
runOnUiThreadの処理部分をRunnableで抜き出して(myRunnableとしました)

runOnUiThread(myRunnable) myRunnable.wait()

みたいな感じでできるのかなと思いましたが、wait()が認識されず赤字になってしまいました。

###補足情報(言語/FW/ツール等のバージョンなど)
Android studio 3.0.1
kotlin 1.2.10

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

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

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

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

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

guest

回答1

0

非同期処理については自力でやるよりも有用なライブラリを使った方が良いと考えます。
Picassoを使ってはいかがでしょうか。

画像ライブラリPicassoの使い方(この記事は古いです)
Kotlin × DataBinding × Picasso で画像ロード

投稿2018/02/10 16:10

nakasho_dev

総合スコア2655

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

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

shikasama

2018/03/13 04:06

返信が大変遅れてしまい申し訳ありません。 Picassoというライブラリは知りませんでした。 Picassoについて少し調べてみましたところ、URLやパスを指定して画像表示ができるものだと認識しました。 ビットマップまたはバイト配列からのロード方法がわからなかったので、もう少し調べてみます。 もしご存知でしたら、教えていただけたら幸いです。
nakasho_dev

2018/03/13 16:02

非同期で画像データを受信しUIに表示することが目的であればPicassoで問題ないと思いますが、非同期で画像データを受信する箇所はいじらずに、受信したバイト配列をUIに表示するところを解決したいのでしょうか。また、myRunnable.wait()が認識されないとのことですがRunnableインタフェースを実装したクラスを匿名クラスとかではなく別途作っているのでしょうか。
shikasama

2018/03/14 02:07

画像データ(pngのバイト配列)を非同期処理で受信(機器から画像データを取得します。)し、UIに画像を表示することが解決したいことです。 myRunnableは匿名クラスとしています。
nakasho_dev

2018/03/14 16:58

受信するファイルはHTTPサーバやローカルファイルではないということですね。ThreadやRunnableをそのまま扱う処理は久しくやっていないのでお役に立てなそうです。非同期処理はライブラリを使ってばかりなので。https://qiita.com/KeithYokoma/items/4e6e9bd4e44aab63424d  また、myRunnable.wait()が認識していないのはKotlinの場合anyを継承しているためObjectのwaitが使えないからだと考えます。
shikasama

2018/03/15 00:44

ライブラリに任せられる部分は任せた方がよいですものね。 Glideという画像ライブラリがビットマップをロードできそうなので これについてもう少し調べ試してみます。 > myRunnable.wait()が認識していないのはKotlinの場合anyを継承しているためObjectのwaitが使えないからだと考えます。 あまりまだわかっていないので勉強しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問