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

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

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

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

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

1664閲覧

Android Glideで画像をダウンロードして壁紙に設定したい

退会済みユーザー

退会済みユーザー

総合スコア0

Android

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

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2021/08/18 21:55

編集2021/08/23 01:10

前提・実現したいこと

Glide(画像ダウンローダーライブラリ)を使って画像をbitmapで取得し、システム壁紙に設定したいです。

発生している問題・エラーメッセージ

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.wallpaper, PID: 7803 android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1565) at com.android.org.conscrypt.Platform.blockGuardOnNetwork(Platform.java:424) at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:564) at okio.InputStreamSource.read(JvmOkio.kt:90) at okio.AsyncTimeout$source$1.read(AsyncTimeout.kt:129) at okio.RealBufferedSource.request(RealBufferedSource.kt:206) at okio.RealBufferedSource.require(RealBufferedSource.kt:199) at okio.RealBufferedSource.readHexadecimalUnsignedLong(RealBufferedSource.kt:381) at okhttp3.internal.http1.Http1ExchangeCodec$ChunkedSource.readChunkSize(Http1ExchangeCodec.kt:429) at okhttp3.internal.http1.Http1ExchangeCodec$ChunkedSource.read(Http1ExchangeCodec.kt:408) at okhttp3.internal.connection.Exchange$ResponseBodySource.read(Exchange.kt:276) at okio.RealBufferedSource.read(RealBufferedSource.kt:189) at okio.RealBufferedSource.exhausted(RealBufferedSource.kt:197) at okio.InflaterSource.refill(InflaterSource.kt:112) at okio.InflaterSource.readOrInflate(InflaterSource.kt:76) at okio.InflaterSource.read(InflaterSource.kt:49) at okio.GzipSource.read(GzipSource.kt:69) at okio.Buffer.writeAll(Buffer.kt:1642) at okio.RealBufferedSource.readString(RealBufferedSource.kt:95) at okhttp3.ResponseBody.string(ResponseBody.kt:187) at com.example.wallpaper.MainActivity$onCreate$2$1.onResponse$lambda-1(MainActivity.kt:55) at com.example.wallpaper.MainActivity$onCreate$2$1.$r8$lambda$L-f6eyl8kI29t2zf84oLw39ndx8(Unknown Source:0) at com.example.wallpaper.MainActivity$onCreate$2$1$$ExternalSyntheticLambda1.run(Unknown Source:6) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:8125) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100) Suppressed: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1565) at com.android.org.conscrypt.Platform.blockGuardOnNetwork(Platform.java:424) at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:564) at okio.InputStreamSource.read(JvmOkio.kt:90) at okio.AsyncTimeout$source$1.read(AsyncTimeout.kt:129) at okio.RealBufferedSource.indexOf(RealBufferedSource.kt:427) at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:320) at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:105) at okhttp3.internal.http1.Http1ExchangeCodec$ChunkedSource.readChunkSize(Http1ExchangeCodec.kt:426) at okhttp3.internal.http1.Http1ExchangeCodec$ChunkedSource.read(Http1ExchangeCodec.kt:408) at okhttp3.internal.Util.skipAll(Util.kt:337) at okhttp3.internal.Util.discard(Util.kt:358) at okhttp3.internal.http1.Http1ExchangeCodec$ChunkedSource.close(Http1ExchangeCodec.kt:450) at okio.ForwardingSource.close(ForwardingSource.kt:34) at okhttp3.internal.connection.Exchange$ResponseBodySource.close(Exchange.kt:309) at okio.RealBufferedSource.close(RealBufferedSource.kt:477) at okio.RealBufferedSource.close(RealBufferedSource.kt:477) at okio.InflaterSource.close(InflaterSource.kt:136) at okio.GzipSource.close(GzipSource.kt:171) at okio.RealBufferedSource.close(RealBufferedSource.kt:477) at kotlin.io.CloseableKt.closeFinally(Closeable.kt:60) at okhttp3.ResponseBody.string(ResponseBody.kt:186)

該当のソースコード

Kotlin

1 Glide.with(this@MainActivity) 2 .asBitmap() 3 .load(photoURL) 4 .into(object : CustomTarget<Bitmap>(){ 5 override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) { 6 wm.setBitmap(resource) 7 } 8 9 override fun onLoadCleared(placeholder: Drawable?) { 10 11 } 12 }) 13 }catch(e:JSONException) { 14 15 } 16 }) 17 } 18 }) 19 }

AndroidManifest.xml(権限部分のみ)

xml

1<uses-permission android:name="android.permission.SET_WALLPAPER" /> 2<uses-permission android:name="android.permission.INTERNET" />

試したこと

into()でImageViewに表示させると正常に表示されるのでおそらくGlideの使い方が間違ってます。

補足情報(FW/ツールのバージョンなど)

Gradleの記述です。

implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'

ターゲットSDKと最小SDKです

minSdk 25 targetSdk 30

Android Studio 2020.3.1

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

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

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

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

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

hoshi-takanori

2021/08/18 22:44

You must call this method on a background thread なので、mainHandler.post ではなくバックグラウンドスレッドで画像を取得する (かつ、その後の wm.setBitmap はメインスレッドに戻す?) 必要があるのでは。
退会済みユーザー

退会済みユーザー

2021/08/18 23:00

では何故intoでImageView上には表示できたのでしょうか?
退会済みユーザー

退会済みユーザー

2021/08/18 23:10

あと少しコードを修正しました。okhttpのenqueue内で行っているので、バックグラウンドスレッド(非同期処理)は出来ていると思われますが、いかがでしょうか。
hoshi-takanori

2021/08/19 01:41

たぶん bitmap.get() をバックグラウンドスレッドで行う必要があるようですね。 または、into で CustomTarget<Bitmap> に処理させるか…。 (into はバックグラウンドスレッドで画像を読み込んで、その後の処理をメインスレッドで行うように見えます。)
退会済みユーザー

退会済みユーザー

2021/08/19 02:24

intoでCustomTargetを追加しましたがダメですね…
退会済みユーザー

退会済みユーザー

2021/08/19 02:30

You must call this method on a background threadのエラーは消えたんですけどね…
退会済みユーザー

退会済みユーザー

2021/08/23 01:12 編集

退会済みユーザー

退会済みユーザー

2021/08/23 01:11 編集

guest

回答1

0

ベストアンサー

CustomTargetで解決しました。お騒がせしました。

投稿2021/08/22 00:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問