🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Android

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

Kotlin

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

Q&A

解決済

2回答

769閲覧

NullPointerException について

_kei

総合スコア26

Java

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

Android

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

Kotlin

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

0グッド

0クリップ

投稿2021/03/19 13:16

Kotlin初心者です。NullPointerExceptionについて質問させていただきます。

前提・実現したいこと

MainActivity のボタンを押下されたらダイアログを表示したいです。しかし、実行して試すとNullPointerExceptionという結果になっていしまいます。null許容型などを使用し、いろいろ試行錯誤してみましたが、うまく実装することができません。なぜこのエラーが起こるのか、どのように解決したらよいのかを教えていただきたいです。

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

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.timerapp, PID: 17027 java.lang.NullPointerException at com.example.timerapp.TimeSet.<init>(TimeSet.kt:13) at com.example.timerapp.MainActivity$onCreate$1.onClick(MainActivity.kt:31) 以下略

なお、エディタ上ではエラーは検出されていません。

該当のソースコード

ダイアログ定義コード

kotlin

1class TimeSet : DialogFragment() { 2   3  // 以下の三行が原因 4 val inflater = activity?.layoutInflater 5 val dialogView = inflater?.inflate(R.layout.timer_setting, null)!! 6 val builder = AlertDialog.Builder(context) 7 8 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 9 builder.setView(dialogView) 10 builder.setTitle("Set Timer") 11 builder.setPositiveButton("OK") { dialog, id -> 12 } 13 builder.setNegativeButton("CANCEL") { dialog, id -> 14 } 15 16 setDialog() 17 18 return builder.create() 19 } 20 21 private fun setDialog() { 22 val hour = dialogView.findViewById<NumberPicker>(R.id.hourPicker) 23 hour.minValue = 0 24 hour.maxValue = 6 25 hour.value = 0 26 27 val min = dialogView.findViewById<NumberPicker>(R.id.minPicker) 28 min.minValue = 0 29 min.maxValue = 60 30 min.value = 5 31 32 val sec = dialogView.findViewById<NumberPicker>(R.id.secPicker) 33 sec.minValue = 0 34 sec.maxValue = 60 35 sec.value = 0 36 } 37}

MainActivity

kotlin

1btn.setOnClickListener { 2 val dialog = TimeSet() 3 dialog.show(supportFragmentManager, "TimeSet") 4}

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

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

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

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

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

hoshi-takanori

2021/03/19 14:21

「以下の三行が原因」の部分を onCreateDialog の中に書けば良いのでは。
guest

回答2

0

自己解決

val inflater = activity?.layoutInflater
val dialogView = inflater?.inflate(R.layout.timer_setting, null)!!
val builder = AlertDialog.Builder(context)

をonCreateDialog内に記述すれば意図通りに機能しました。

hoshi-takanori 様 ありがとうございました。

投稿2021/03/19 14:29

_kei

総合スコア26

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

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

0

nullの変数に対して何らかの操作を行ったという例外です。
そいつが出た行、前の行、そのまた前の行あたりに出てくる変数を調べて、nullのものがないかを見てみましょう

投稿2021/03/19 13:19

y_waiwai

総合スコア88038

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問