警报对话空对象引用

时间:2018-11-05 00:12:57

标签: java android android-studio nullreferenceexception

当用户想要创建游戏时,我会弹出一个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声明:

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);

1 个答案:

答案 0 :(得分:1)

您的wagerRV为空,因为找不到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为R.id.wagerRV的TextView。请在线查看一些示例,以使用XML设置内容视图,并且XML应该具有该TextView。如果您的wagerRV在活动中而不在对话框中,请在活动级别而不是在AlertDialog的onClick中声明它。

更新2

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