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

如何从Firestore获取订单ID传给适配器并避免空指针异常

问题原因

Activity生命周期执行顺序比Firestore异步回调快,onStart方法执行时,异步请求还没返回,addToCartAdaptor还没完成初始化,所以调用方法会触发空指针。同时如果用户没有匹配的未支付订单,addToCartAdaptor本来就不会被初始化,也会触发空指针。

修复方案

1. 生命周期方法增加空判断兜底

修改onStart和onStop方法,调用适配器方法前先判空:

@Override
protected void onStart() {
    super.onStart();
    // 仅当适配器初始化完成后才调用监听方法
    if (addToCartAdaptor != null) {
        addToCartAdaptor.startListening();
    }
}

@Override
protected void onStop() {
    super.onStop();
    // 仅当适配器初始化完成后才调用监听方法
    if (addToCartAdaptor != null) {
        addToCartAdaptor.stopListening();
    }
}

2. 适配器初始化后直接启动监听

因为异步回调返回时onStart已经执行完毕,所以在初始化适配器的回调里,设置完适配器后直接启动监听:
在setUpRecycleView方法的异步回调中,recyclerView.setAdapter(addToCartAdaptor); 后补充代码:

recyclerView.setAdapter(addToCartAdaptor);
// 新增:初始化完成后直接启动监听
addToCartAdaptor.startListening();

3. 可选优化

  • 把RecyclerView的初始化逻辑(findViewById、setHasFixedSize、setLayoutManager)移到onCreate方法中,不要放在异步回调里,减少重复操作。
  • 增加Firestore查询失败的处理逻辑,判断task.isSuccessful(),查询失败时给用户提示。
  • 增加购物车为空的状态展示,当没有匹配的未支付订单时,显示空布局提示用户,避免页面空白。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:12:03