前提・実現したいこと
タイトルそのままになってしまいますが、picassoなどを使ってWebから画像をダウンロードし、BottomNavigationViewのMenuItemのアイコンに設定したいです。
発生している問題・エラーメッセージ
開発中のアプリをエミュレータを立ち上げて確認しようとしていますが、以下のエラーによりアプリが落ちてしまい困っています。。
2020-04-09 18:32:37.189 23279-23279/com.example.abb E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.abb, PID: 23279 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.abb/com.example.abb.MainActivity}: java.lang.IllegalStateException: Method call should not happen from the main thread. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3333) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3477) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:216) at android.app.ActivityThread.main(ActivityThread.java:7464) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:955) Caused by: java.lang.IllegalStateException: Method call should not happen from the main thread. at com.squareup.picasso.Utils.checkNotMain(Utils.java:121) at com.squareup.picasso.RequestCreator.get(RequestCreator.java:416) at com.example.abb.MainActivity.onCreate(MainActivity.kt:28) at android.app.Activity.performCreate(Activity.java:7990) at android.app.Activity.performCreate(Activity.java:7979) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3308) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3477) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:216) at android.app.ActivityThread.main(ActivityThread.java:7464) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:955)
該当のソースコード
kotlin
1class MainActivity : AppCompatActivity() { 2 3 override fun onCreate(savedInstanceState: Bundle?) { 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.activity_main) 6 7 var url = "http://i.imgur.com/DvpvklR.png" 8 9 var bitmap: Bitmap = Picasso.get().load(url).get() 10 var drawable = BitmapDrawable(resources, bitmap) 11 12 val navView: BottomNavigationView = findViewById(R.id.nav_view) 13 var a: Menu = navView.menu 14 val b: MenuItem = a.findItem(R.id.navigation_home) 15 16 b.setIcon(drawable) 17 18 val navController = findNavController(R.id.nav_host_fragment) 19 // Passing each menu ID as a set of Ids because each 20 // menu should be considered as top level destinations. 21 val appBarConfiguration = AppBarConfiguration(setOf( 22 R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)) 23 setupActionBarWithNavController(navController, appBarConfiguration) 24 navView.setupWithNavController(navController) 25 } 26 27}
試したこと
非同期制御が必要なのかと思い、runBlockingを使って試してみてましたが非同期処理の基礎を理解できていなくエラーが解消できずです。
補足情報(FW/ツールのバージョンなど)
kotlin
picasso
回答1件
あなたの回答
tips
プレビュー