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

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

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

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Android

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

Kotlin

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

Q&A

解決済

3回答

557閲覧

Kotlin(Android)でNullPointerException。FloatingActionButtonが定義されていない? 

Yakusugi

総合スコア123

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Android

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

Kotlin

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

0グッド

0クリップ

投稿2023/09/04 14:20

編集2023/09/10 13:51

KotlinでAndroidアプリを作成しています。
下記コードの48行目でNullPointerエラーが発生しており、コードの何が問題なのかが特定できません。
Caused by: java.lang.NullPointerException: findViewById(R.id.floating_action_btn) must not be null

XMLのViewの方では当該ボタンは定義してあります。
お手数ですが、原因特定のヒントなどを頂けますと幸いです。
よろしくお願いいたします。

Kotlin

1package com.dream_engineering.cloud_budget_tracker.view 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.view.View 6import android.view.animation.Animation 7import android.view.animation.AnimationUtils 8import android.widget.Toast 9import androidx.fragment.app.Fragment 10import com.dream_engineering.cloud_budget_tracker.R 11import com.dream_engineering.cloud_budget_tracker.databinding.ActivityMainBinding 12import com.getbase.floatingactionbutton.FloatingActionButton 13 14class MainActivity : AppCompatActivity() { 15 16 private val rotateOpen: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.rotate_open_anim) } 17 private val rotateClose: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.rotate_close_anim) } 18 private val fromBottom: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.from_botton_anim) } 19 private val toBottom: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.to_bottom_anim) } 20 21 private lateinit var binding: ActivityMainBinding 22// val binding = ActivityMainBinding.inflate(layoutInflater) 23 24 25 private var clicked = false 26 private lateinit var addBtn: FloatingActionButton 27 private lateinit var spendingAddBtn: FloatingActionButton 28 private lateinit var incomeAddBtn: FloatingActionButton 29 private lateinit var bankAddBtn: FloatingActionButton 30 31 fun getAddBtn(): FloatingActionButton { 32 return addBtn 33 } 34 35 fun getSpendingBtn(): FloatingActionButton { 36 return spendingAddBtn 37 } 38 39 fun getIncomeBtn(): FloatingActionButton { 40 return incomeAddBtn 41 } 42 43 fun getBankBtn(): FloatingActionButton { 44 return bankAddBtn 45 } 46 47 override fun onCreate(savedInstanceState: Bundle?) { 48 super.onCreate(savedInstanceState) 49 binding = ActivityMainBinding.inflate(layoutInflater) 50 setContentView(binding.getRoot()); 51 52 addBtn = binding.floatingActionBtn 53 spendingAddBtn = binding.spendingBtn 54 incomeAddBtn = binding.incomeBtn 55 bankAddBtn = binding.bankBtn 56 57 setContentView(binding.root) 58 replaceFragments(StatsFragment()) 59 60 addBtn.setOnClickListener() { 61 onAddBtnClicked() 62 } 63 64 spendingAddBtn.setOnClickListener() { 65 Toast.makeText(this, "spending btn clicked", Toast.LENGTH_SHORT).show() 66 } 67 68 incomeAddBtn.setOnClickListener() { 69 Toast.makeText(this, "income btn clicked", Toast.LENGTH_SHORT).show() 70 } 71 72 bankAddBtn.setOnClickListener() { 73 Toast.makeText(this, "bank btn clicked", Toast.LENGTH_SHORT).show() 74 } 75 76 binding.bottomNavView.setOnItemReselectedListener { 77 78 when(it.itemId) { 79 R.id.stats -> replaceFragments(StatsFragment()) 80 R.id.search -> replaceFragments(SearchFragment()) 81 R.id.exchange -> replaceFragments(ExchangeFragment()) 82 83 else -> { 84 } 85 } 86 true 87 } 88 89 90 } 91 92 private fun replaceFragments(fragment: Fragment) { 93 val fragmentManager = supportFragmentManager 94 val fragmentTransaction = fragmentManager.beginTransaction() 95 fragmentTransaction.replace(R.id.frame_layout, fragment) 96 fragmentTransaction.commit() 97 } 98 99 private fun onAddBtnClicked() { 100 setAnimation(clicked) 101 setVisibility(clicked) 102 clicked = !clicked 103 } 104 105 private fun setAnimation(clicked: Boolean) { 106 if (!clicked) { 107 spendingAddBtn.startAnimation(fromBottom) 108 incomeAddBtn.startAnimation(fromBottom) 109 bankAddBtn.startAnimation(fromBottom) 110 addBtn.startAnimation(rotateOpen) 111 } else { 112 spendingAddBtn.startAnimation(toBottom) 113 incomeAddBtn.startAnimation(toBottom) 114 bankAddBtn.startAnimation(toBottom) 115 addBtn.startAnimation(rotateClose) 116 } 117 } 118 119 private fun setVisibility(clicked: Boolean) { 120 if (!clicked) { 121 spendingAddBtn.visibility = View.VISIBLE 122 incomeAddBtn.visibility = View.VISIBLE 123 bankAddBtn.visibility = View.VISIBLE 124 } else { 125 spendingAddBtn.visibility = View.INVISIBLE 126 incomeAddBtn.visibility = View.INVISIBLE 127 bankAddBtn.visibility = View.INVISIBLE 128 } 129 } 130 131}

XML

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".view.MainActivity"> 8 9 <FrameLayout 10 android:id="@+id/frame_layout" 11 app:layout_constraintBottom_toBottomOf="parent" 12 android:layout_width="0dp" 13 android:layout_height="0dp" 14 app:layout_constraintEnd_toEndOf="parent" 15 app:layout_constraintStart_toStartOf="parent" 16 app:layout_constraintTop_toTopOf="parent"> 17 18 </FrameLayout> 19 20 <com.google.android.material.floatingactionbutton.FloatingActionButton 21 android:id="@+id/bank_btn" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:layout_margin="16dp" 25 android:clickable="true" 26 android:contextClickable="true" 27 app:layout_constraintBottom_toBottomOf="parent" 28 app:layout_constraintBottom_toTopOf="@+id/income_btn" 29 app:layout_constraintEnd_toEndOf="parent" 30 android:visibility="invisible" 31 app:srcCompat="@drawable/bank" 32 tools:ignore="MissingConstraints" 33 android:contentDescription="Add transaction" 34 /> 35 36 <com.google.android.material.floatingactionbutton.FloatingActionButton 37 android:id="@+id/income_btn" 38 android:layout_width="wrap_content" 39 android:layout_height="wrap_content" 40 android:layout_margin="16dp" 41 android:clickable="true" 42 android:contextClickable="true" 43 app:layout_constraintBottom_toBottomOf="parent" 44 app:layout_constraintBottom_toTopOf="@+id/spending_btn" 45 app:layout_constraintEnd_toEndOf="parent" 46 app:srcCompat="@drawable/income" 47 android:visibility="invisible" 48 tools:ignore="MissingConstraints" /> 49 50 <com.google.android.material.floatingactionbutton.FloatingActionButton 51 android:id="@+id/spending_btn" 52 android:layout_width="wrap_content" 53 android:layout_height="wrap_content" 54 android:layout_margin="16dp" 55 android:clickable="true" 56 android:contextClickable="true" 57 app:layout_constraintBottom_toBottomOf="parent" 58 app:layout_constraintBottom_toTopOf="@+id/floating_action_btn" 59 app:layout_constraintEnd_toEndOf="parent" 60 android:visibility="invisible" 61 app:srcCompat="@drawable/spending" 62 tools:ignore="MissingConstraints" /> 63 64 <com.google.android.material.floatingactionbutton.FloatingActionButton 65 android:id="@+id/floating_action_btn" 66 android:layout_width="wrap_content" 67 android:layout_height="wrap_content" 68 android:layout_margin="16dp" 69 android:clickable="true" 70 android:contextClickable="true" 71 app:layout_constraintBottom_toBottomOf="parent" 72 app:layout_constraintBottom_toTopOf="@+id/bottom_nav_view" 73 app:layout_constraintEnd_toEndOf="parent" 74 android:visibility="visible" 75 app:srcCompat="@drawable/add" 76 tools:ignore="MissingConstraints" /> 77 78 <com.google.android.material.bottomnavigation.BottomNavigationView 79 android:id="@+id/bottom_nav_view" 80 android:layout_width="0dp" 81 android:layout_height="wrap_content" 82 app:layout_constraintBottom_toBottomOf="parent" 83 app:layout_constraintEnd_toEndOf="parent" 84 app:layout_constraintStart_toStartOf="parent" 85 app:menu="@menu/bottom_nav" 86 /> 87 88</androidx.constraintlayout.widget.ConstraintLayout>

編集画面
イメージ説明

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

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

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

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

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

guest

回答3

0

Kotlin

1package com.dream_engineering.cloud_budget_tracker.view 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.view.View 6import android.view.animation.Animation 7import android.view.animation.AnimationUtils 8import android.widget.Toast 9import androidx.fragment.app.Fragment 10import com.dream_engineering.cloud_budget_tracker.R 11import com.dream_engineering.cloud_budget_tracker.databinding.ActivityMainBinding 12import com.getbase.floatingactionbutton.FloatingActionButton 13 14class MainActivity : AppCompatActivity() { 15 16 private val rotateOpen: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.rotate_open_anim) } 17 private val rotateClose: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.rotate_close_anim) } 18 private val fromBottom: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.from_botton_anim) } 19 private val toBottom: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.to_bottom_anim) } 20 21 private lateinit var binding: ActivityMainBinding 22// val binding = ActivityMainBinding.inflate(layoutInflater) 23 24 25 private var clicked = false 26 private lateinit var addBtn: FloatingActionButton 27 private lateinit var spendingAddBtn: FloatingActionButton 28 private lateinit var incomeAddBtn: FloatingActionButton 29 private lateinit var bankAddBtn: FloatingActionButton 30 31 fun getAddBtn(): FloatingActionButton { 32 return addBtn 33 } 34 35 fun getSpendingBtn(): FloatingActionButton { 36 return spendingAddBtn 37 } 38 39 fun getIncomeBtn(): FloatingActionButton { 40 return incomeAddBtn 41 } 42 43 fun getBankBtn(): FloatingActionButton { 44 return bankAddBtn 45 } 46 47 override fun onCreate(savedInstanceState: Bundle?) { 48 super.onCreate(savedInstanceState) 49 binding = ActivityMainBinding.inflate(layoutInflater) 50 setContentView(binding.getRoot()); 51 52 addBtn = binding.floatingActionBtn 53 spendingAddBtn = binding.spendingBtn 54 incomeAddBtn = binding.incomeBtn 55 bankAddBtn = binding.bankBtn 56 57 setContentView(binding.root) 58 replaceFragments(StatsFragment()) 59 60 addBtn.setOnClickListener() { 61 onAddBtnClicked() 62 } 63 64 spendingAddBtn.setOnClickListener() { 65 Toast.makeText(this, "spending btn clicked", Toast.LENGTH_SHORT).show() 66 } 67 68 incomeAddBtn.setOnClickListener() { 69 Toast.makeText(this, "income btn clicked", Toast.LENGTH_SHORT).show() 70 } 71 72 bankAddBtn.setOnClickListener() { 73 Toast.makeText(this, "bank btn clicked", Toast.LENGTH_SHORT).show() 74 } 75 76 binding.bottomNavView.setOnItemReselectedListener { 77 78 when(it.itemId) { 79 R.id.stats -> replaceFragments(StatsFragment()) 80 R.id.search -> replaceFragments(SearchFragment()) 81 R.id.exchange -> replaceFragments(ExchangeFragment()) 82 83 else -> { 84 } 85 } 86 true 87 } 88 89 90 } 91 92 private fun replaceFragments(fragment: Fragment) { 93 val fragmentManager = supportFragmentManager 94 val fragmentTransaction = fragmentManager.beginTransaction() 95 fragmentTransaction.replace(R.id.frame_layout, fragment) 96 fragmentTransaction.commit() 97 } 98 99 private fun onAddBtnClicked() { 100 setAnimation(clicked) 101 setVisibility(clicked) 102 clicked = !clicked 103 } 104 105 private fun setAnimation(clicked: Boolean) { 106 if (!clicked) { 107 spendingAddBtn.startAnimation(fromBottom) 108 incomeAddBtn.startAnimation(fromBottom) 109 bankAddBtn.startAnimation(fromBottom) 110 addBtn.startAnimation(rotateOpen) 111 } else { 112 spendingAddBtn.startAnimation(toBottom) 113 incomeAddBtn.startAnimation(toBottom) 114 bankAddBtn.startAnimation(toBottom) 115 addBtn.startAnimation(rotateClose) 116 } 117 } 118 119 private fun setVisibility(clicked: Boolean) { 120 if (!clicked) { 121 spendingAddBtn.visibility = View.VISIBLE 122 incomeAddBtn.visibility = View.VISIBLE 123 bankAddBtn.visibility = View.VISIBLE 124 } else { 125 spendingAddBtn.visibility = View.INVISIBLE 126 incomeAddBtn.visibility = View.INVISIBLE 127 bankAddBtn.visibility = View.INVISIBLE 128 } 129 } 130 131}

投稿2023/09/10 11:57

Yakusugi

総合スコア123

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

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

0

自己解決

頂いたヒントを元にMainActivityを変更することで解決しました。

投稿2023/09/05 15:42

Yakusugi

総合スコア123

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

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

jimbe

2023/09/05 19:13

解決したコードは回答に書いてください。 質問のコードを変えてしまうと質問の文や回答との整合性が無くなり、後からこの質問を見た人が分からなくなります。
Yakusugi

2023/09/10 12:02

返信が遅れすみません。 質問時点の編集前のコードを消失してしまったため、以後気をつけます。 ご指摘頂きありがとうございました。
jimbe

2023/09/10 12:50

編集の履歴は、質問本文とタイトルの間にある「投稿 ~ 編集 ~」の日付の「編集」の所がリンクになっていてそこから見られます。 (diff/patch の差分です)
Yakusugi

2023/09/10 13:54

スクショをこちらに掲載できなかったので、質問の部分に載せました。 diff/patch の差分を確認できるボタンなどありますでしょうか。 ちょっと見当らなかったので、ご教示頂く事は可能でしょうか。
guest

0

ビューバインディング が使われています。
findViewById ではなく、 binding から該当 View を取得して下さい。

ついでに。
レイアウトのビューに tools:ignore="MissingConstraints" は使わないほうがいいと思います。記述に不備があるのを直さずただ無視させるのでは、問題を先送りするだけです。
フラグメントを配置するビューとして androidx.fragment.app.FragmentContainerView という専用品がありますので利用しては如何でしょうか。

投稿2023/09/04 16:49

編集2023/09/04 17:45
jimbe

総合スコア13318

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

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

Yakusugi

2023/09/04 23:18

ご回答頂きありがとうございます。 試しにaddBtnにつきまして、下記のように書き換えてみたのすが、view(floating_action_btn)が読み込まれません。 こちらについてググっているのですが、回答が探し出せておりません。。。 addBtn= binding.floating_action_btn
Yakusugi

2023/09/04 23:20

上記質問ですが、一旦無視して頂いて大丈夫です。 頂いたリンク未確認でした。 リンク確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問