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

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

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

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

Kotlin

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

Q&A

解決済

1回答

1832閲覧

null絡みのエラー、アプリがクラッシュしてしまい解消できません。

nep8810

総合スコア2

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2020/09/18 01:42

前提・実現したいこと

editTextが空の状態でボタンがクリックされた時にエラーメッセージを表示させたいのですが、以下のようなエラーが発生しており、解消できません。
どなたかご教授いただけますでしょうか。

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

Caused by: kotlin.TypeCastException: null cannot be cast to non-null type android.widget.Button at com.example.calcapp.MainActivity.onCreate(MainActivity.kt:35)

該当のソースコード

class MainActivity : AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setContentView(R.layout.editor_layout) val btn1 = this.findViewById(R.id.button1) as Button //35行目 btn1?.let{it ->it.setOnClickListener(this)} val btn2 = this.findViewById(R.id.button2) as Button btn2?.let{it ->it.setOnClickListener(this)} val btn3 = this.findViewById(R.id.button3) as Button btn3?.let{it ->it.setOnClickListener(this)} val btn4 = this.findViewById(R.id.button4) as Button btn4?.let{it ->it.setOnClickListener(this)} } //onClickメソッドでSecondActivityに遷移させる override fun onClick(v: View?) { //Intentのインスタンスを生成 //コンストラクタの第一引数はcontextなのでActivity自身,第2引数は遷移させたいActivityのクラスを指定 val intent = Intent(this, SecondActivity::class.java) //EditTextの文字列を取得し、数値に変換 val A = editText1.text.toString().toDouble() val B = editText2.text.toString().toDouble() if (A.toString() == ""|| B.toString() == ""){ makeText(this, "数値が入力されていません!!", Toast.LENGTH_SHORT).show()} else { when (v?.id) { R.id.button1 -> intent.putExtra("VALUE", (A + B)) R.id.button2 -> intent.putExtra("VALUE", (A - B)) R.id.button3 -> intent.putExtra("VALUE", (A * B)) R.id.button4 -> intent.putExtra("VALUE", (A / B)) } } //生成したIntentを引数にしてstartActivityメソッドを呼び出すことで遷移 startActivity(intent) } } ``` よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらくR.id.button1の要素がR.layout.activity_mainのレイアウトにあるのですよね。
setContentViewを2回読んでいるため、R.layout.activity_mainの内容がR.layout.editor_layoutで上書きされていると思われます。

Kotlin

1 setContentView(R.layout.activity_main) 2 setContentView(R.layout.editor_layout)

投稿2020/09/21 18:20

nakasho_dev

総合スコア2655

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

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

nep8810

2020/09/22 01:07

ご回答いただきありがとうございます。 ご指摘いただいた通り setContentView(R.layout.editor_layout) の記述があるために、Activityで使用するレイアウトファイルが editor_layout.xml に上書きされている状態だったようです。 上記の記述を削除したところエラーは解消されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問