java EventBus事件生命周期中的一些问题
我使用这个库greenrobot/EventBus保存数据并在不同的活动中传递数据。在本例中,我使用EventBus传递“订单”和 联合活动中某些活动的“cartItems”对象自定义模型
在这个活动中,我有一个方法,它需要分布在这两个对象中的值,但这些对象在不同的事件中调用,如下所示。我尝试在两个事件中调用此方法updateUI(),但其中一个对象始终为NULL
当所有对象都已设置好时,是否可能有一个事件
欢迎对EventBus中事件生命周期如何工作的详细解释
@Subscribe(sticky = true)
public void onOrderEvent(Order order) {
this.order = order;
updateUI();
}
@Subscribe(sticky = true)
public void onBasketProductsEvent(Products products) {
this.basketProducts = products;
updateUI();
}
private void updateUI() {
double subtotal = getSubTotalPrice(basketProducts.getProducts());
double taxPrice = getTaxPrice(subtotal,order.getTax());
}
当我在这两个事件中调用此方法时,我有一些NullPointerException,因为对象中的一个总是null
# 1 楼答案
这是意料之中的行为。这是因为
this.order
或this.basketProducts
尚未初始化您需要记住,无论何时发布活动,都会呼叫订阅者。例如,当您拨打以下电话时:
然后
onOrderEvent(Order order)
订户将立即被呼叫。在上述情况下发生了以下情况:onOrderEvent(Order order)
this.order
已初始化this.basketProducts
尚未初始化NullPointerException
被引发李>一个简单的修复可以通过检查这两个参数是否都满足这一点来完成。命令
or
这个。basketProductsare already initialized before calling the
updateUI`。比如:我认为让您对EventBus机制有点困惑的原因是
sticky
标志。请查看http://greenrobot.org/eventbus/documentation/configuration/sticky-events/了解详细信息# 2 楼答案
尽管我试图检查强制值是否为空,如下所示:
这种方法从未执行过。我不知道为什么会发生这种情况,也许在初始化变量之前,它们同时存在。如果有人知道为什么会发生这种情况,请随时发表评论
无论如何,我找到了解决这个问题的办法
我们可以在onCreate(Bundle savedInstanceState)方法中手动获取粘性事件,这将使所有值同时初始化,并且我们可以在初始化值后调用所需的方法,如下所示: