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

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

ただいまの
回答率

89.10%

ラジオボタンダイアログの要素を任意で追加したいが、NullPointerExceptionが出て停止してしまう。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 227

numatuka

score 9

実現したいこと

ダイアログの要素にデータから取り出された要素を代入していき、ラジオボタンダイアログで要素を表示して選択したい。

ソースコード

    public static class AlertDialogFragment extends DialogFragment {
        // 選択肢のリスト
        private String[] menulist  = new String[100];
        final List<Integer> checkedItems = new ArrayList<>();
        int i,getID;
        String s;

        @Override
        @NonNull
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            for(i=0;i<=100;i++) {
                getID=Team.getInt("Team"+i,100);
                if(getID==100){
                    break;
                }
                s=Team.getString("Name"+i,"error1");
                menulist[i]=s;

            }
            checkedItems.add(0);
            AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
            alert.setTitle("Selector");
            alert.setSingleChoiceItems(menulist, 0, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    checkedItems.clear();
                    checkedItems.add(which);
                }
            });
            alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });
            return alert.create();
        }
    }

発生している問題

com.android.internal.os.ZygoteInit$MethodAndArgsCaller
java.lang.reflect.InvocationTargetException
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference


デバッグで確認した所、menulistに呼び出したデータを挿入することは出来ていた。しかし、returnまで行った所NullPointerExceptionが出て動作が停止してしまった。

試したこと

最初のmenulist内で、{"1","2"}のように宣言すれば動作することは確認している。また、ラジオボタンを選択してOKを選んで返すことも可能になっている。しかし、menulistの中身を変えようとすると全て失敗してしまっている。

環境

Window10
Androidstudio 3.4.1

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

「発生している問題」の続きに, どこで発生しているのかがあるはずですが, 確認していらっしゃいますか.

配列を [100] と宣言したら, 使えるのは 0~99 までです.

for(i=0;i<=100;i++) {


これでは i が 0~100 まで回ります

また, menulist は有効なデータのみとしてください.
配列の 100 の要素のうち, 後のほうには null が入っているのではありませんか.

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/13 02:43

    iのループに関しては気が付いてませんでした、ありがとうございます。nullが入っているというコメントでヒントを得て自己解決のようにした所、無事解決しました!ありがとうございます!

    キャンセル

check解決した方法

0

    public static class AlertDialogFragment extends DialogFragment {
        // 選択肢のリスト
        final List<String> menulist = new ArrayList<>();
        final List<Integer> checkedItems = new ArrayList<>();
        int i,getID;
        String s;
        @Override
        @NonNull
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            for(i=0;i<=99;i++) {
                getID=Team.getInt("Team"+i,100);
                if(getID==100){
                    break;
                }
                s=Team.getString("Name"+i,"error1");
                menulist.add(s);
            }
            String[] array = menulist.toArray(new String[menulist.size()]);
            checkedItems.add(0);
            AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
            alert.setTitle("Selector");
            alert.setSingleChoiceItems(array, 0, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    checkedItems.clear();
                    checkedItems.add(which);
                }
            });
            alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });
            return alert.create();
        }
    }


このようにリスト型に入れてから変換することにより、目当てのデータを呼び出すことが出来ました。回答、ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • Javaに関する質問
  • ラジオボタンダイアログの要素を任意で追加したいが、NullPointerExceptionが出て停止してしまう。