首页 > 解决方案 > 警报对话空对象引用

问题描述

当用户想要创建游戏时,我有一个 alertDialogue 弹出窗口,它询问用户他们想在游戏中赌博多少分,但它一直抛出空引用错误,我不太清楚为什么。

这是我的 alertDialogue 正面按钮点击监听器

 alertDialog.setPositiveButton("Confirm Wager", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int whichButton) {
                            createLobbyGame();
                            double wagerD;
                            String wager;
                            TextView wagerRV = findViewById(R.id.wagerRV);

                            wagerD = Double.parseDouble(edittext.getText().toString());
                            wager = Double.toString(wagerD);
                            boolean wage = wager.endsWith("0");

                            if(wage) {
                                wagerRV.setText(wager+"0");
                            } else {
                                wagerRV.setText(wager);
                            }

                        }
                    });

尝试 setText 时会引发错误。这是它抛出的错误

尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”

我知道我过去有这个工作,但我必须改变一些东西使它不再正常工作,但我不知道我会改变什么。

我知道这是一个非常常见且简单的问题,但我查看了许多其他答案,但没有找到适合我的解决方案。

有什么帮助吗?


文本视图声明:

TextView wagerRV = (TextView) ((AlertDialog.Builder) alertDialog).findViewById(R.id.wagerRV);

我如何定义alertDialog:

final AlertDialog.Builder alertDialog = new AlertDialog.Builder(FlipCoinLobby.this);
final EditText edittext = new EditText(FlipCoinLobby.this);

alertDialog.setView(edittext);

标签: javaandroidandroid-studionullreferenceexception

解决方案


wagerRV是 null 因为它找不到R.id.wagerRV

您需要onClick()使用对话框引用从内部检索视图。

改变

TextView wagerRV = findViewById(R.id.wagerRV);

TextView wagerRV = (TextView) ((AlertDialog) alertDialog).findViewById(R.id.wagerRV);

删除任何不必要的强制转换(我目前没有 IDE)。

根据评论和问题编辑更新:-

alertDialog.setView(edittext)--> 你alertDialog没有任何带有 id 的 TextView R.id.wagerRV。请在线查看一些关于使用 XML 设置内容视图的示例,并且 XML 应该具有该 TextView。如果您wagerRV在活动中而不是在对话框内,则在活动级别声明它,而不是在onClickalertDialog 内。

更新 2

您需要使用 将您的构建器更改为实际的 AlertDialog AlertDialog alertDialog = alertDialogBuilder.create();。然后铸造也将起作用。


推荐阅读