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

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

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

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

Android Studio

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

Kotlin

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

Q&A

解決済

1回答

2404閲覧

Kotlin ImageViewをタップするとCould not execute method for android:onClickとなってアプリが落ちてしまう

Haruto513

総合スコア52

Android

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

Android Studio

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

Kotlin

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

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

0グッド

0クリップ

投稿2020/01/16 05:30

Android開発初心者です。
書籍を参考に、いくつかAndroidアプリを作って開発の勉強をしている最中です。
カメラアプリと連携するアプリを作成しています。

画面いっぱいに配置したImageViewをタップするとカメラアプリが起動し、撮影後アプリの画面へ戻ると画像がImageViewにセットされるといった処理を実現しようとしています。
そちらは無事に動きましたが、続いて撮影後、ストレージから画像を取得してセットするという処理を書籍に従い書いていったところ、アプリが落ちるようになりました。

以下が該当のコードです。

Kotlin

1//MainActivity.kt 2 3 4class MainActivity : AppCompatActivity() { 5 6 private var _imageUri: Uri? = null 7 8 override fun onCreate(savedInstanceState: Bundle?) { 9 super.onCreate(savedInstanceState) 10 setContentView(R.layout.activity_main) 11 } 12 13 @SuppressLint("MissingSuperCall") 14 public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 15 if (requestCode == 200 && resultCode == Activity.RESULT_OK) { 16// val bitmap = data?.getParcelableExtra<Bitmap>("data") 17 val ivCamera = findViewById<ImageView>(R.id.ivCamara) 18// ivCamera?.setImageBitmap(bitmap) 19 ivCamera.setImageURI(_imageUri) 20 } 21 } 22 23 public override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { 24 if (requestCode == 2000 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 25 val ivCamera = findViewById<ImageView>(R.id.ivCamara) 26 onCameraImageClick(ivCamera) 27 } 28 } 29 30 31 fun onCameraImageClick(view: View?) { 32 33 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 34 val permission = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE) 35 ActivityCompat.requestPermissions(this,permission, 2000) 36 return 37 } 38 39 val dateFormat = SimpleDateFormat("yyyyMMddHHmmss") 40 val now = Date() 41 val nowStr = dateFormat.format(now) 42 val fileName = "UseCameraActivityPhoto_${nowStr}.jpg" 43 val values = ContentValues() 44 values.put(MediaStore.Images.Media.TITLE, fileName) 45 values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") 46 47 val intent = Intent(MediaStore.EXTRA_OUTPUT, _imageUri) 48 intent.putExtra(MediaStore.EXTRA_OUTPUT, _imageUri) 49 startActivityForResult(intent, 200) 50 } 51 52} 53 54 55 56

画面のレイアウトはこのように書いています。

xml

1 2<?xml version="1.0" encoding="utf-8"?> 3<ImageView 4 xmlns:android="http://schemas.android.com/apk/res/android" 5 xmlns:app="http://schemas.android.com/apk/res-auto" 6 android:id="@+id/ivCamara" 7 android:onClick="onCameraImageClick" 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 android:layout_gravity="center" 11 android:scaleType="center" 12 app:srcCompat="@android:drawable/ic_menu_camera"> 13</ImageView> 14 15

ImageViewをタップして落ちた時に出たエラーがこちらです。

logcat

1 2E/AndroidRuntime: FATAL EXCEPTION: main 3 Process: jp.wings.nikkeibp.cameraintentsample, PID: 7550 4 java.lang.IllegalStateException: Could not execute method for android:onClick 5 at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402) 6 at android.view.View.performClick(View.java:6597) 7 at android.view.View.performClickInternal(View.java:6574) 8 at android.view.View.access$3100(View.java:778) 9 at android.view.View$PerformClick.run(View.java:25885) 10 at android.os.Handler.handleCallback(Handler.java:873) 11 at android.os.Handler.dispatchMessage(Handler.java:99) 12 at android.os.Looper.loop(Looper.java:193) 13 at android.app.ActivityThread.main(ActivityThread.java:6669) 14 at java.lang.reflect.Method.invoke(Native Method) 15 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 16 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 17 Caused by: java.lang.reflect.InvocationTargetException 18 at java.lang.reflect.Method.invoke(Native Method) 19 at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397) 20 at android.view.View.performClick(View.java:6597)  21 at android.view.View.performClickInternal(View.java:6574)  22 at android.view.View.access$3100(View.java:778)  23 at android.view.View$PerformClick.run(View.java:25885)  24 at android.os.Handler.handleCallback(Handler.java:873)  25 at android.os.Handler.dispatchMessage(Handler.java:99)  26 at android.os.Looper.loop(Looper.java:193)  27 at android.app.ActivityThread.main(ActivityThread.java:6669)  28 at java.lang.reflect.Method.invoke(Native Method)  29 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)  30 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)  31 Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=output (has extras) } 32 at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2007) 33 at android.app.Instrumentation.execStartActivity(Instrumentation.java:1673) 34 at android.app.Activity.startActivityForResult(Activity.java:4586) 35 at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676) 36 at android.app.Activity.startActivityForResult(Activity.java:4544) 37 at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663) 38 at jp.wings.nikkeibp.cameraintentsample.MainActivity.onCameraImageClick(MainActivity.kt:70) 39 at java.lang.reflect.Method.invoke(Native Method)  40 at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397)  41 at android.view.View.performClick(View.java:6597)  42 at android.view.View.performClickInternal(View.java:6574)  43 at android.view.View.access$3100(View.java:778)  44 at android.view.View$PerformClick.run(View.java:25885)  45 at android.os.Handler.handleCallback(Handler.java:873)  46 at android.os.Handler.dispatchMessage(Handler.java:99)  47 at android.os.Looper.loop(Looper.java:193)  48 at android.app.ActivityThread.main(ActivityThread.java:6669)  49 at java.lang.reflect.Method.invoke(Native Method)  50 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)  51 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)  52 53

目標は、ImageViewをタップしてもアプリが落ちず、カメラアプリが起動し、撮影後、ストレージから画像を取得してそれを同じImageViewにセットすることです。

解決方法を知っている方、もしくは、似たようなトラブルに対して解説しているようなWEBページなどを知っていらしたら、ご教示頂けると助かります。

作業環境
OS: Microsoft Windows10 Pro
使用言語: Kotlin 1.3.61
Android Studio 3.5.3
仮想デバイス: Nexus 4 API 28

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

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

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

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

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

guest

回答1

0

自己解決

書籍を参考にもう一度一からコードを書きなおしてみました。

そうしたら無事に動いたので、エラーが出たコードと比較してみると

onActivityResultのところで、if文の後ろの条件が間違っていました。おそらくこれが原因?かと思いました。

成功したコード

Kotlin

1 2 public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 3 if(requestCode == 200 && resultCode == RESULT_OK) { 4 val ivCamera = findViewById<ImageView>(R.id.ivCamara) 5 ivCamera.setImageURI(_imageUri) 6 } 7// super.onActivityResult(requestCode, resultCode, data) 8 } 9

エラーが出たコード

Kotlin

1 2 @SuppressLint("MissingSuperCall") 3 public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 4 if (requestCode == 200 && resultCode == Activity.RESULT_OK) { 5// val bitmap = data?.getParcelableExtra<Bitmap>("data") 6 val ivCamera = findViewById<ImageView>(R.id.ivCamara) 7// ivCamera?.setImageBitmap(bitmap) 8 ivCamera.setImageURI(_imageUri) 9 } 10 } 11 12

if (requestCode == 200 && resultCode == Activity.RESULT_OK)ではなく、if(requestCode == 200 && resultCode == RESULT_OK)でした。

投稿2020/01/16 06:13

Haruto513

総合スコア52

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問