java - 警报对话空对象引用
问题描述
当用户想要创建游戏时,我有一个 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);
解决方案
你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
在活动中而不是在对话框内,则在活动级别声明它,而不是在onClick
alertDialog 内。
更新 2
您需要使用 将您的构建器更改为实际的 AlertDialog AlertDialog alertDialog = alertDialogBuilder.create();
。然后铸造也将起作用。
推荐阅读
- python - 在 Python 3 中创建“虚拟”模块的最佳方式
- django - Django 表单提交无需重新加载页面
- wpf - 使用内容内的标签更改焦点上的按钮标签前景
- google-maps - 谷歌静态地图 api 调用不起作用我需要一个计费帐户还是 api 调用错误?
- office-js - 什么是一次性在 officejs 中购买加载项
- python - 如何在 XML 文件中插入处理指令?
- python - 如何将单列数据转换为python数据框中的多列?
- reactjs - ReactJS 按钮在点击时改变颜色
- html - 调整网格项上的属性大小会导致其他网格项重叠
- google-app-engine - 如何以编程方式扩展应用引擎?