java - 尝试在空对象引用上调用虚拟方法“void android.widget.RadioGroup.addView(android.view.View)”
问题描述
我是 android 的初学者,我使用 java 语言而不是 Kotlin。基本上我在按下按钮后显示一个自定义警报对话框,在警报对话框中有两个单选按钮。但问题是在单击按钮以显示自定义对话框后,它会崩溃并显示空点异常。下面是代码和日志。
CustomDialog.java
public class CustomDialog extends AppCompatDialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
LayoutInflater layoutInflater=getActivity().getLayoutInflater();
View view=layoutInflater.inflate(R.layout.custom_dialog,null);
builder.setView(view)
.setTitle("Check Methods");
final int[] num=getResources().getIntArray(R.array.methods);
RadioButton radioButton=new RadioButton(getActivity());
RadioButton radioButton1=new RadioButton(getActivity());
radioButton.setText("A");
RadioGroup radioGroup=getActivity().findViewById(R.id.radioGroup);
radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int kk=num[0];
int aa=kk;
}
});
radioButton1.setText("B");
radioGroup.addView(radioButton); //In this line it is showing null point exception and in debugging it is showing "radioGroup" is null
radioGroup.addView(radioButton1);
return builder.create();
}
}
custom_dialog.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioGroup"/>
</LinearLayout>
方法.xml
<resources>
<integer-array name="methods">
<item>0</item>
</integer-array>
</resources>
MainActivity.Java
btnMethod.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openDialog(); //to show custom dialog after button press
}}
private void openDialog() {
CustomDialog customDialog=new CustomDialog();
customDialog.show(getSupportFragmentManager(),"Custom Dialog");
}
日志
java.lang.NullPointerException:尝试在 com.nabil.myapplication.CustomDialog.onCreateDialog(CustomDialog.java:33) 的空对象引用上调用虚拟方法“void android.widget.RadioGroup.addView(android.view.View)”在 android.support.v4.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:330) 在 android.support.v4.app.Fragment.performGetLayoutInflater(Fragment.java:1308) 在 android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1460) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852) 在 android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) 在 android.support。 v4.app.BackStackRecord.executeOps(BackStackRecord.java:802) 在 android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625) 在 android.support.v4。app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411) 在 android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733) 在 android.os.Handler.handleCallback(Handler.java:907) 在 android.os.Handler.dispatchMessage(Handler.java:105)在 android.os.Looper.loop(Looper.java:216) 在 android.app.ActivityThread.main(ActivityThread.java:7625) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal .os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733) 在android.os.Handler.handleCallback(Handler.java:907) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:216) 在 android.app.ActivityThread .main(ActivityThread.java:7625) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 在 com.android.internal .os.ZygoteInit.main(ZygoteInit.java:987)FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733) 在android.os.Handler.handleCallback(Handler.java:907) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:216) 在 android.app.ActivityThread .main(ActivityThread.java:7625) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 在 com.android.internal .os.ZygoteInit.main(ZygoteInit.java:987)app.FragmentManagerImpl$1.run(FragmentManager.java:733) 在 android.os.Handler.handleCallback(Handler.java:907) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper。在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller 的 java.lang.reflect.Method.invoke(Native Method) 的 android.app.ActivityThread.main(ActivityThread.java:7625) 的循环(Looper.java:216)。在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) 运行(RuntimeInit.java:524)app.FragmentManagerImpl$1.run(FragmentManager.java:733) 在 android.os.Handler.handleCallback(Handler.java:907) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper。在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller 的 java.lang.reflect.Method.invoke(Native Method) 的 android.app.ActivityThread.main(ActivityThread.java:7625) 的循环(Looper.java:216)。在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) 运行(RuntimeInit.java:524)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) 运行(RuntimeInit.java:524)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) 运行(RuntimeInit.java:524)
解决方案
因为是必须从 View 中找到RadioGroup
的 then 的一个元素,用代码试试:custom_dialog.xml
RadioGroup
custom_dialog.xml
LayoutInflater layoutInflater=getActivity().getLayoutInflater();
View view=layoutInflater.inflate(R.layout.custom_dialog,null); //load custom_dialog.xml to View
...
RadioGroup radioGroup=view.findViewById(R.id.radioGroup); //try to retrieve rarioGroup in custom_dialog.xml
推荐阅读
- javascript - 如何通过脚本元素访问由 javascript 加载的外部脚本
- python - 在 Mac OSX 上安装 Pyinstaller
- c++ - 使用两个 uint_32 数字的倍数时,模幂运算溢出
- html - 在内联列表元素之间添加水平线
- python - 将多列转换为 MultiIndex
- java - Java - 旧数组总是等于新数组?
- javascript - 如何将 vue 与原始 tcp 节点服务器连接?
- branch - 如何在 GitKraken 中删除多个分支?
- c++ - 在 C++ 中获取数据库连接
- python-3.x - 使用 Folium 在地图上创建标记会导致空白 HTML 页面