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

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

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

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

Java

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

Android

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

Q&A

解決済

1回答

941閲覧

logcatにNullPointerExceptionと、エラーが発生してしまった。

reo4949

総合スコア2

NullPointerException

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

Java

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

Android

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

0グッド

0クリップ

投稿2024/01/11 08:09

編集2024/01/11 09:23

実現したいこと

logcatのエラーをなくして正常な動作に戻したい。

発生している問題・分からないこと

ListViewのtextを押して画面変更しようとすると、logcatに以下のように提示されます。
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
atcom.websarva.wings.android.fragmentsample.MenuThanksFragment.onViewCreated(MenuThanksFragment.java:32)

エラーメッセージ

logcat

1 Process: com.websarva.wings.android.fragmentsample, PID: 16880 2 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 3at com.websarva.wings.android.fragmentsample.MenuThanksFragment.onViewCreated(MenuThanksFragment.java:32) 4at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2987) 5at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:546) 6at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) 7at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) 8at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106) 9at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) 10at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) 11at android.os.Handler.handleCallback(Handler.java:942) 12at android.os.Handler.dispatchMessage(Handler.java:99) 13at android.os.Looper.loopOnce(Looper.java:201) 14at android.os.Looper.loop(Looper.java:288) 15at android.app.ActivityThread.main(ActivityThread.java:7872) 16at java.lang.reflect.Method.invoke(Native Method) 17at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 18at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 19

該当のソースコード

MenuListFragment.java

1package com.websarva.wings.android.fragmentsample; 2 3import android.app.Activity; 4import android.os.Bundle; 5 6import androidx.annotation.NonNull; 7import androidx.annotation.Nullable; 8import androidx.fragment.app.Fragment; 9import androidx.fragment.app.FragmentManager; 10import androidx.fragment.app.FragmentTransaction; 11 12import android.view.View; 13import android.widget.AdapterView; 14import android.widget.ListView; 15import android.widget.SimpleAdapter; 16 17import java.util.ArrayList; 18import java.util.HashMap; 19import java.util.List; 20import java.util.Map; 21 22 23public class MenuListFragment extends Fragment { 24 public MenuListFragment() { 25 super(R.layout.fragment_menu_list); 26 } 27 28 @Override 29 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 30 super.onViewCreated(view, savedInstanceState); 31 32 ListView lvMenu = view.findViewById(R.id.lvMenu); 33 List<Map<String, String>> menuList = new ArrayList<>(); 34 Map<String, String> menu = new HashMap<>(); 35 menu.put("name", "唐揚げ定食"); 36 menu.put("price", "800円"); 37 menuList.add(menu); 38 39 menu = new HashMap<>(); 40 menu.put("name", "ハンバーグ定食"); 41 menu.put("price", "850円"); 42 menuList.add(menu); 43 44 menu = new HashMap<>(); 45 menu.put("name", "刺身定食"); 46 menu.put("price", "1200円"); 47 menuList.add(menu); 48 49 menu = new HashMap<>(); 50 menu.put("name", "お好み焼き"); 51 menu.put("price", "700円"); 52 menuList.add(menu); 53 54 Activity parentActivity = getActivity(); 55 String[] from = {"name", "price"}; 56 int[] to = {android.R.id.text1, android.R.id.text2}; 57 SimpleAdapter adapter = new SimpleAdapter(parentActivity, menuList, 58 android.R.layout.simple_list_item_2, from, to); 59 lvMenu.setAdapter(adapter); 60 61 lvMenu.setOnItemClickListener(new ListItemClickListener()); 62 } 63 64 private class ListItemClickListener implements AdapterView.OnItemClickListener { 65 @Override 66 public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 67 Map<String,String> item = (Map<String, String>) parent.getItemAtPosition(position); 68 String menuName = item.get("name"); 69 String menuPrice = item.get("price"); 70 71 Bundle bundle = new Bundle(); 72 bundle.putString("menuName",menuName); 73 bundle.putString("menuPrice",menuPrice); 74 75 FragmentManager manager = getParentFragmentManager(); 76 FragmentTransaction transaction = manager.beginTransaction(); 77 transaction.setReorderingAllowed(true); 78 transaction.addToBackStack("Only List"); 79 transaction.replace(R.id.fragmentMainContainer, MenuThanksFragment.class, bundle); 80 transaction.commit(); 81 } 82 } 83}

MenuThanksFragment.java

1package com.websarva.wings.android.fragmentsample; 2 3 4 5import android.os.Bundle; 6import android.view.View; 7import android.widget.Button; 8import android.widget.TextView; 9 10import androidx.annotation.NonNull; 11import androidx.annotation.Nullable; 12import androidx.fragment.app.Fragment; 13import androidx.fragment.app.FragmentManager; 14 15public class MenuThanksFragment extends Fragment { 16 public MenuThanksFragment(){ 17 super(R.layout.fragment_menu_list); 18 } 19 20 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState){ 21 super.onViewCreated(view, savedInstanceState); 22 23 Bundle extras = getArguments(); 24 String menuName = ""; 25 String menuPrice = ""; 26 if (extras != null){ 27 menuName = extras.getString("menuName"); 28 menuPrice = extras.getString("menuPrice"); 29 } 30 TextView tvMenuName = view.findViewById(R.id.tvMenuName); 31 TextView tvMenuPrice = view.findViewById(R.id.tvMenuPrice); 32 tvMenuName.setText(menuName); 33 tvMenuPrice.setText(menuPrice); 34 35 Button btBackButton = view.findViewById(R.id.btThxBack); 36 btBackButton.setOnClickListener(new ButtonClickListener()); 37 } 38 39 private class ButtonClickListener implements View.OnClickListener{ 40 @Override 41 public void onClick(View view){ 42 FragmentManager manager = getParentFragmentManager(); 43 manager.popBackStack(); 44 } 45 } 46}

fragment_menu_thanks.xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".MainActivity"> 9 10 <TextView 11 android:id="@+id/tvThxTitle" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content" 14 android:layout_marginStart="8dp" 15 android:layout_marginTop="8dp" 16 android:layout_marginEnd="8dp" 17 android:text="@string/tv_thx_title" 18 android:textSize="24dp" 19 app:layout_constraintEnd_toEndOf="parent" 20 app:layout_constraintStart_toStartOf="parent" 21 app:layout_constraintTop_toTopOf="parent" /> 22 23 <TextView 24 android:id="@+id/tvThxDesc" 25 android:layout_width="0dp" 26 android:layout_height="wrap_content" 27 android:layout_marginStart="8dp" 28 android:layout_marginTop="8dp" 29 android:layout_marginEnd="8dp" 30 android:text="@string/tv_thx_desc" 31 app:layout_constraintEnd_toEndOf="parent" 32 app:layout_constraintHorizontal_bias="0.0" 33 app:layout_constraintStart_toStartOf="parent" 34 app:layout_constraintTop_toBottomOf="@+id/tvThxTitle" /> 35 36 <TextView 37 android:id="@+id/tvMenuName" 38 android:layout_width="wrap_content" 39 android:layout_height="wrap_content" 40 android:layout_marginStart="8dp" 41 android:layout_marginTop="8dp" 42 app:layout_constraintEnd_toEndOf="parent" 43 app:layout_constraintHorizontal_bias="0.0" 44 app:layout_constraintStart_toStartOf="parent" 45 app:layout_constraintTop_toBottomOf="@+id/tvThxDesc" /> 46 47 <Button 48 android:id="@+id/btThxBack" 49 android:layout_width="0dp" 50 android:layout_height="wrap_content" 51 android:layout_marginStart="8dp" 52 android:layout_marginEnd="8dp" 53 android:text="@string/bt_thx_back" 54 app:layout_constraintEnd_toEndOf="parent" 55 app:layout_constraintHorizontal_bias="0.0" 56 app:layout_constraintStart_toStartOf="parent" 57 app:layout_constraintTop_toBottomOf="@+id/tvMenuName" /> 58 59 <TextView 60 android:id="@+id/tvMenuPrice" 61 android:layout_width="wrap_content" 62 android:layout_height="wrap_content" 63 android:layout_marginEnd="8dp" 64 app:layout_constraintEnd_toEndOf="parent" 65 app:layout_constraintTop_toBottomOf="@+id/tvThxDesc" /> 66 67</androidx.constraintlayout.widget.ConstraintLayout>

fragment_menu_list.xml

1<?xml version="1.0" encoding="utf-8"?> 2<ListView 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/lvMenu" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".MenuListFragment"> 9 10 <!-- TODO: Update blank fragment layout --> 11 12</ListView>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

あまり情報を落としこめなかった。

補足

特になし

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

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

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

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

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

jimbe

2024/01/11 08:26 編集

エラーメッセージがコードのマークダウンから外れているようです。 また、ソースコードにもなぜ"特になし"というのがあるのでしょうか。 なお、コードのマークダウンで error とかファイル名らしきものを書かれている個所は java とか xml とかの"コードの言語名"を書く所です。 ファイル名はマークダウンの外に書いてください。 そして、本件は android studio で発生しているのでは無く android アプリで発生しているものです。android studio は単にそれを使って作っているというだけですので、タグには android を入れ android studio は入れないほうが良いと思います。
reo4949

2024/01/11 08:53

コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
jimbe

2024/01/11 09:15

編集ありがとうございます。 言語名の所にまだファイル名を書かれているようですが…。 回答もご確認ください。
reo4949

2024/01/11 09:30

ご指摘ありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
guest

回答1

0

ベストアンサー

java

1 public MenuThanksFragment(){ 2 super(R.layout.fragment_menu_list); 3 }

fragment_menu_thanks でなく fragment_menu_list になっています。
↓のようになるのではないでしょうか。

java

1 public MenuThanksFragment(){ 2 super(R.layout.fragment_menu_thanks); 3 }

投稿2024/01/11 08:18

編集2024/01/11 09:15
jimbe

総合スコア13168

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

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

reo4949

2024/01/11 09:18

すみません、追記した fragment_menu_list.xml を指定しています。 紛らわしくて申し訳ないです。
jimbe

2024/01/11 10:29 編集

恐らくそこが勘違いしてる所だと思います。 fragment の ViewCreated の引数として渡される view を使っての view.findViewById(R.id.tvMenuName); で得られるのは、コンストラクタに指定した fragment_menu_list に定義されているものだけです。 ですから他の xml に定義されている View は得られません。 普通は fragment とレイアウト xml ファイルとは 1:1 で対応させ同じ名前を使用します。 MenuThanksFragment ならレイアウトは fragment_menu_thanks なのではないでしょうか。
reo4949

2024/01/11 12:36

指摘されたレイアウトの部分を直したら、エラーが解決しました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問