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

Hilt在Fragment的onAttach中因Preconditions.checkNotNull抛出空指针异常

解决Hilt Fragment空指针异常的方案

问题原因

你的空指针异常出现在Hilt初始化Fragment组件上下文的阶段,核心原因是在MyFragment的onAttach方法中,你将自定义包装的LanguageContextWrapper直接传递给了super.onAttach(),干扰了Hilt内部对原始Context的处理流程,导致Hilt创建组件上下文时触发空指针校验失败。

修复步骤

1. 修改onAttach方法,恢复Hilt的原始Context处理逻辑

不要在onAttach中替换传递给父类的Context,让Hilt先完成组件初始化:

abstract public class MyFragment extends Fragment {
    @Override
    public void onAttach(@NonNull Context context) {
        // 直接调用父类方法,传递原始Context,让Hilt完成组件初始化
        super.onAttach(context);
        // 无需手动保存context,使用Fragment自带的getContext()/requireContext()即可
    }
}

2. 通过重写getContext()提供语言包装后的Context

在MyFragment中重写getContext()和requireContext(),确保所有依赖Context的地方都能拿到正确的语言包装实例:

abstract public class MyFragment extends Fragment {
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
    }

    @Nullable
    @Override
    public Context getContext() {
        Context originalContext = super.getContext();
        if (originalContext == null) {
            return null;
        }
        String preferLanguage = LanguageContextWrapper.getUserPreferLanguage(originalContext);
        // 确保LanguageContextWrapper.create不会返回null
        return LanguageContextWrapper.create(originalContext, preferLanguage);
    }

    @NonNull
    @Override
    public Context requireContext() {
        Context context = getContext();
        if (context == null) {
            throw new IllegalStateException("Fragment " + this + " 未关联到Context");
        }
        return context;
    }
}

3. 额外检查

确保LanguageContextWrapper.create()方法不会返回null,如果该方法存在返回null的情况,需要补充逻辑保证返回有效的Context实例,避免后续出现空指针。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:04:54