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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

3056閲覧

Unable to instantiate fragment

konn_

総合スコア28

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2022/01/02 12:41

編集2022/01/03 02:28

前提・実現したいこと

NavControllerを使用して画面遷移しようとしています。
ところが

findNavController().navigate(R.id.action_profFragment_to_loginFragment)

このコードを入力してビルドしてボタンを押したらエミュレーターが落ちてしまいます。

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

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.a, PID: 14260 androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.a.Security.Login.LoginFragment: calling Fragment constructor caused an exception at androidx.fragment.app.Fragment.instantiate(Fragment.java:631) at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:483) at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132) at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162) at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58) at androidx.navigation.NavController.navigate(NavController.java:1066) at androidx.navigation.NavController.navigate(NavController.java:944) at androidx.navigation.NavController.navigate(NavController.java:877) at androidx.navigation.NavController.navigate(NavController.java:863) at androidx.navigation.NavController.navigate(NavController.java:851) at com.example.a.loginDialogFragment.onCreateDialog$lambda-1$lambda-0(loginDialogFragment.kt:26) at com.example.a.loginDialogFragment.$r8$lambda$LUd8obz2APtj56U7y_5N8HaLNa4(Unknown Source:0) at com.example.a.loginDialogFragment$$ExternalSyntheticLambda0.onClick(Unknown Source:2) at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1250) at android.widget.AdapterView.performItemClick(AdapterView.java:330) at android.widget.AbsListView.performItemClick(AbsListView.java:1187) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3179) at android.widget.AbsListView.onTouchUp(AbsListView.java:4109) at android.widget.AbsListView.onTouchEvent(AbsListView.java:3867) at android.view.View.dispatchTouchEvent(View.java:14309) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3112) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2785) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:488) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1871) at android.app.Dialog.dispatchTouchEvent(Dialog.java:859) at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:446) at android.view.View.dispatchPointerEvent(View.java:14568) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6016) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5819) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5310) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5485) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5542) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333) E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8080) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8031) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7992) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8203) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loop(Looper.java:183) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at androidx.fragment.app.Fragment.instantiate(Fragment.java:613) ... 62 more Caused by: java.lang.NullPointerException at com.example.a.Security.Login.LoginFragment.getBinding(LoginFragment.kt:29) at com.example.a.Security.Login.LoginFragment.<init>(LoginFragment.kt:31) ... 65 more

該当のソースコード

LoginFragment

1package com.example.a.Security.Login 2 3import android.content.ContentValues.TAG 4import androidx.lifecycle.ViewModelProvider 5import android.os.Bundle 6import android.util.Log 7import androidx.fragment.app.Fragment 8import android.view.LayoutInflater 9import android.view.View 10import android.view.ViewGroup 11import androidx.navigation.fragment.NavHostFragment 12import androidx.navigation.fragment.findNavController 13import com.example.a.R 14import com.example.a.databinding.LoginFragmentBinding 15import com.google.firebase.auth.FirebaseAuth 16 17class LoginFragment : Fragment() { 18 19 companion object { 20 fun newInstance() = LoginFragment() 21 } 22 23 private lateinit var viewModel: LoginViewModel 24 private lateinit var auth: FirebaseAuth 25 26 private var _binding: LoginFragmentBinding? = null 27 private val binding get() = _binding!! 28 29 override fun onCreate(savedInstanceState: Bundle?) { 30 super.onCreate(savedInstanceState) 31 binding.login.setOnClickListener { 32 login() 33 } 34 binding.forgotpassword.setOnClickListener { 35 pw_forget() 36 } 37 } 38 39 override fun onCreateView( 40 inflater: LayoutInflater, container: ViewGroup?, 41 savedInstanceState: Bundle? 42 ): View? { 43 _binding = LoginFragmentBinding.inflate(inflater, container, false) 44 return binding.root 45 } 46 47 override fun onActivityCreated(savedInstanceState: Bundle?) { 48 super.onActivityCreated(savedInstanceState) 49 viewModel = ViewModelProvider(this).get(LoginViewModel::class.java) 50 } 51 52 private fun login() { 53 54 var email = binding.email.text.toString() 55 var password = binding.password.text.toString() 56 57 if (email.isNotEmpty() && password.isNotEmpty()) { 58 auth.signInWithEmailAndPassword(email, password) 59 .addOnCompleteListener { task -> 60 61 if (task.isSuccessful) { 62 Log.d(TAG, "ログインに成功しました。") 63 } 64 } 65 } 66 } 67 68 private fun pw_forget() { 69 val navController = findNavController() 70 navController.navigate(R.id.action_loginFragment_to_signinFragment) 71 } 72 73 override fun onDestroyView() { 74 super.onDestroyView() 75 _binding = null 76 } 77 78

自分でやったこと

「calling Fragment constructor caused an exception」

「 Unable to instantiate fragment」
などで検索しましたが分かりませんでした。

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

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

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

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

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

jimbe

2022/01/02 13:59

デバッグ依頼でしょうか。
konn_

2022/01/02 14:05

すみません。どういうことでしょうか。。 エミュレーターが落ちてしまって困っているので、誰か解決してくださる方を募集しています。
konn_

2022/01/02 14:31

失礼しました。追加しました。
jimbe

2022/01/02 14:56 編集

例外(エラー) メッセージ自体を検索するよりは、まずメッセージを読んでみたほうが良いと思います。 > Unable to instantiate fragment com.example.a.Security.Login.LoginFragment: calling Fragment constructor caused an exception 「フラグメントcom.example.a.Security.Login.LoginFragmentをインスタンス化できません: Fragmentコンストラクターを呼び出すと例外が発生しました」(by Google翻訳) です。 LoginFragment のコンストラクタに問題があると言っていますので、ご提示のコードよりはまず LoginFragment のコンストラクタで何が起きているのかを調べるべきでしょう。 その該当箇所は、メッセージの最後にある > Caused by: java.lang.NullPointerException > at com.example.a.Security.Login.LoginFragment.getBinding(LoginFragment.kt:29) が示しています。 LoginFragment のコンストラクタ内である LoginFragment.kt の 29 行目で NullPointerException です。 どのようなコードでしょう。 LoginFragment.kt の該当箇所周辺のコードもご質問に追加して頂いたほうが良さそうに思いますが、如何でしょうか。
konn_

2022/01/02 14:57

なるほど。 29行目は private val binding get() = _binding!! 必要かどうか分かりませんが31行目は private val email = binding.email.toString() です。
hoshi-takanori

2022/01/02 16:04 編集

LoginFragment の private val email (と password) は普通のプロパティなので、フラグメント生成時に初期化されますが、その時点では binding が null のためにエラーになります。(というか、そもそも _binding 生成してますか?) また、普通のプロパティ (しかも val) なので、入力欄を編集しても値が変わりません。これらはプロパティにはせずに、必要なところでローカル変数にすると良いでしょう。 あと、普通のプロパティと lateinit や computed プロパティの違いや、viewModel や binding を生成する方法やタイミングなどを学ぶ必要があるかと…。
jimbe

2022/01/02 16:25

> 入力欄を編集しても値が変わりません toString() ですから (View じゃなく) 値のほう保存してますね、見落としてました (^^;
hoshi-takanori

2022/01/02 23:22

私も見落としてましたが、text.toString() じゃなくて単なる toString() なので、入力値じゃなくて謎 (じゃないけど初心者にとっては謎としか言いようがない) の文字列ですね…。
konn_

2022/01/03 02:34

・private val email (と password)は、varに変更し、ローカル変数にしました。 ・toString()から、text.toString()に変更しました。 ViewModelについては、ViewModelに関するサイトなどで勉強しています。 わかってきたら変更しようと思います。
konn_

2022/01/03 02:51

回答に気づかないでコメントの返信をしていました。 先程、回答通りにやったら、無事エミュレーターが落ちることがなくなりました。 ありがとうございます。
guest

回答1

0

ベストアンサー

ご提示ありがとうございます。

ということは binding(=_binding) か binding.email が null ということになります。
_binding は 28 行目で _binding: LoginFragmentBinding? = null となっていますが・・・どこで値を設定しているでしょうか。

そもそも Fragment でのビューバインドの扱いでは、例えば
フラグメントでビュー バインディングを使用する のように onCreateView 内で

_binding = LoginFragmentBinding.inflate(inflater, container, false)

のように _binding を設定して利用するのではないでしょうか。
それを行える以前のコンストラクト時に _binding を利用することは出来ないものと思います。
Fragment におきましては通常の処理コードは公式的には onViewCreated() に書くよう推奨される風ですので、 onCreateView() で _binding を設定し、 onViewCreated() でそれを利用するのが良いものと考えます。(onCreate 内でも binding を使っていますがそれも移動で。)

投稿2022/01/02 16:08

編集2022/01/02 16:31
jimbe

総合スコア13209

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問