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

Android Fragment间传递对象时出现NullPointerException问题求助

解决Fragment间传递Serializable对象时的NullPointerException问题

你遇到的空指针问题根源非常明确——设置Fragment Arguments的顺序完全搞反了!

先看你发送代码里的致命问题:你先执行了ft.commit()提交事务,之后才调用fragment.setArguments(bundle)。但commit()之后,FragmentTransaction已经把Fragment的状态提交给FragmentManager了,这时候再设置Arguments根本不会生效,所以接收Fragment拿到的getArguments()自然是null,调用getSerializable()就直接触发空指针异常了。

正确的发送代码写法

你需要把setArguments放在commit()之前执行,同时要确保你的Customer类确实实现了Serializable接口(这是putSerializable生效的前提):

// 1. 先创建Bundle并放入要传递的对象
Bundle bundle = new Bundle();
bundle.putSerializable("Object", customer);
Log.d("Kapil", "setData: " + customer.getClass().getSimpleName());

// 2. 创建目标Fragment并绑定Arguments
CustomerInformationFragment fragment = new CustomerInformationFragment();
fragment.setArguments(bundle);

// 3. 最后执行Fragment事务的提交
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
// 别忘了添加Fragment到布局容器,比如 ft.replace(R.id.fragment_container, fragment);
ft.commit();

接收端的安全写法

另外,接收端最好先做非空判断,避免后续调用出现意外崩溃:

if (getArguments() != null) {
    Customer customer = (Customer) getArguments().getSerializable("Object");
    if (customer != null) {
        Log.d("Kapil", "onCreateView: " + customer.getFirstName());
    } else {
        Log.d("Kapil", "onCreateView: 传递的Customer对象为空");
    }
} else {
    Log.d("Kapil", "onCreateView: Arguments为空");
}

额外注意事项

  • 务必确认Customer类已经正确实现Serializable接口:
    public class Customer implements Serializable {
        // 你的类成员变量和方法
    }
    
  • 从错误栈里的FragmentPagerAdapter.finishUpdate能看出来,你可能是在ViewPager场景下使用Fragment,这种情况要确保在PagerAdapter创建Fragment实例的时候就设置好Arguments,不要事后再传递。

内容的提问来源于stack exchange,提问作者H Kapil Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:34:28