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

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

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

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

Android

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

Android Studio

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

解決済

Unable to instantiate fragment

konn_
konn_

総合スコア13

Java

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

Android

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

Android Studio

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

1回答

0評価

0クリップ

345閲覧

投稿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

package com.example.a.Security.Login import android.content.ContentValues.TAG import androidx.lifecycle.ViewModelProvider import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.findNavController import com.example.a.R import com.example.a.databinding.LoginFragmentBinding import com.google.firebase.auth.FirebaseAuth class LoginFragment : Fragment() { companion object { fun newInstance() = LoginFragment() } private lateinit var viewModel: LoginViewModel private lateinit var auth: FirebaseAuth private var _binding: LoginFragmentBinding? = null private val binding get() = _binding!! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.login.setOnClickListener { login() } binding.forgotpassword.setOnClickListener { pw_forget() } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = LoginFragmentBinding.inflate(inflater, container, false) return binding.root } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel = ViewModelProvider(this).get(LoginViewModel::class.java) } private fun login() { var email = binding.email.text.toString() var password = binding.password.text.toString() if (email.isNotEmpty() && password.isNotEmpty()) { auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "ログインに成功しました。") } } } } private fun pw_forget() { val navController = findNavController() navController.navigate(R.id.action_loginFragment_to_signinFragment) } override fun onDestroyView() { super.onDestroyView() _binding = null }

自分でやったこと

「calling Fragment constructor caused an exception」

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Android

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

Android Studio

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