You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeneralDialogFragment获取参数时触发空指针异常求助

问题分析与解决方案

嘿,我一眼就发现导致空指针异常的两个关键问题啦,咱们逐一解决:

1. 调用方式错误(核心原因)

你在Activity里的代码犯了一个典型的静态工厂方法使用错误:

GeneralDialogFragment generalDialogFragment = new GeneralDialogFragment();
generalDialogFragment.newInstance("Test", "Its working good");
generalDialogFragment.show(getFragmentManager(), "dialog");

newInstance()是静态方法,它内部会创建一个新的GeneralDialogFragment实例并给它设置Arguments,但你并没有把这个返回的实例赋值给变量,反而用自己手动new出来的那个实例去调用show()——这个手动new的实例根本没有设置过Arguments,所以在onCreateDialog()里调用getArguments()时自然会返回null,触发空指针异常。

正确的调用方式

直接通过静态工厂方法获取实例,不要手动new:

GeneralDialogFragment generalDialogFragment = GeneralDialogFragment.newInstance("Test", "Its working good");
generalDialogFragment.show(getFragmentManager(), "dialog");

2. Bundle的Key不匹配(隐藏坑)

除了调用问题,你还在newInstance()里留了个小陷阱:

args.putString("title ", title); // 注意key末尾有个空格!

而在onCreateDialog()里取title时用的key是"title"(没有空格):

.setTitle(getArguments().getString("title"))

就算你修复了调用问题,这里也会取不到title的值(返回null),导致对话框标题为空。所以要把key统一,去掉空格:

// newInstance里修正key
args.putString("title", title);

修正后的完整代码

GeneralDialogFragment类(关键部分修正)

public static GeneralDialogFragment newInstance(String title, String message) {
    GeneralDialogFragment dialog = new GeneralDialogFragment();
    Bundle args = new Bundle();
    args.putString("title", title); // 去掉key末尾的空格
    args.putString("message", message);
    dialog.setArguments(args);
    return dialog;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // 增加判空,让代码更健壮
    Bundle args = getArguments();
    String title = args != null ? args.getString("title") : "";
    String message = args != null ? args.getString("message") : "";
    
    return new AlertDialog.Builder(getActivity())
            .setTitle(title)
            .setMessage(message)
            .setCancelable(false)
            .create();
}

Activity调用代码

GeneralDialogFragment generalDialogFragment = GeneralDialogFragment.newInstance("Test", "Its working good");
generalDialogFragment.show(getFragmentManager(), "dialog");

这样修改后,空指针异常就会消失,对话框也能正常显示标题和内容啦!

内容的提问来源于stack exchange,提问作者Sudeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:38:46