JavaでAndroidの家計簿アプリを開発しています。
今回質問したい内容の概要は下記となります。
今回作成しているアプリが会計簿の為、主に2種類の画面が存在します。
1:家計簿情報を入力する為の入力画面
2:1で入力した情報を閲覧するための閲覧画面。
今回問題が起きている箇所は、1の入力画面になります。
原因を説明する為、下記図1に関して説明させて頂ければと思います。
図1は以前こちらで質問させて頂いた時に、ご助力頂いた回答者様に作成頂いた図を元に作成したものです。
前回実装した流れとしては、SpendingTrackerAcvtivity(閲覧画面)上のListViewに表示されたアイテムをクリック
↓
入力画面は4つのFragmentから成っており、今回の実装では購入履歴入力画面を担うAddSpendingFragmentを、
OnClickListner(intent)→AddBudgetTracker(4つのFragmentのコンテナとなるActivity)からFragmentManagerで4つの中から指定のFragment(今回の場合、AddSpendingFragment)を起動。
↓
編集・削除を行い、DBを操作
↓
元のSpendingTrackerAcvtivityに戻る
ここまでは実装出来たのですが、
この先で問題が発生しました。
下記コード内(AddSpendingFragment.java)の「String requestKey = getArguments().getString(ARG_REQUESTKEY);」で、
ARG_REQUESTKEYはupdate/delete用コードの受け取りを担う変数で、
図1のようにListViewから当該Fragmentを起動した場合は問題無く当該画面が表示されるのですが、
通常通り、アイテムを入力する為に当該Fragmentを開くと、
ARG_REQUESTKEYが空の為、最下部に記載したNullPointerExceptionが発生してしまいます。
下記部分全体をif文などで囲ったりしてみたのですが、
それでも解決には至らず、四苦八苦しております。
String requestKey = getArguments().getString(ARG_REQUESTKEY); BudgetTrackerSpending budgetTrackerSpending = (BudgetTrackerSpending) getArguments().getSerializable(ARG_DATA); if (budgetTrackerSpending != null) { enterDate.setText(budgetTrackerSpending.getDate()); enterStoreName.setText(budgetTrackerSpending.getStoreName()); enterProductName.setText(budgetTrackerSpending.getProductName()); enterProductType.setText(budgetTrackerSpending.getProductType()); enterPrice.setText(String.valueOf(budgetTrackerSpending.getPrice())); enterVatRate.setText(String.valueOf(budgetTrackerSpending.getTaxRate())); enterNotes.setText(budgetTrackerSpending.getNotes()); isEdit = true; }
大変お手数ですが、
ご助力頂ける方がおられましたら、
ご回答のほど、よろしくお願いいたします。
図1
エラー文
FATAL EXCEPTION: main Process: com.myproject.offlinebudgettrackerappproject, PID: 15516 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference at com.myproject.offlinebudgettrackerappproject.AddSpendingFragment.onCreateView(AddSpendingFragment.java:130) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3104) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:524) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1890) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1808) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1751) at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:538) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/21 06:04