gpt4 book ai didi

java - EventBus - 事件生命周期的一些问题

转载 作者:行者123 更新时间:2023-11-30 12:04:20 26 4
gpt4 key购买 nike

我有一个使用这个库的情况 greenrobot/EventBus保存数据并将它们传递给不同的 Activity 。在这种情况下,我使用 EventBus 来传递“订单”和 “cartItems” OBJECT CustomModel 来自联合 Activity 中的一些 Activity 。

在此 Activity 中,我有一个方法需要分布在这两个对象中的值,但这些对象调用不同的事件,如下所示。我已尝试在这两个事件中调用此方法 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,因为总是有一个对象为空。

最佳答案

When I call this method in both events I have some NullPointerException because always one of object is null.

这是预期的行为。这是因为 this.orderthis.basketProducts 尚未初始化。

您需要记住,每当您发布事件时,订阅者总是会被调用。例如,当您调用以下内容时:

EventBus.getDefault().postSticky(new Order());

然后,将立即调用 onOrderEvent(Order order) 订阅者。上述案例中发生了以下情况:

  • 发布订单事件
  • 订阅者onOrderEvent(Order order)
  • this.order 已初始化
  • updateUIthis.basketProducts 尚未初始化的情况下被调用
  • NullPointerException 被引发。

可以通过检查 this.orderthis.basketProducts 在调用 updateUI` 之前是否已经初始化来完成一个简单的修复。像这样:

private void updateUI() {

// don't do update when both the required values is null.
if(order == null || basketProducts == null) {
return;
}

double subtotal = getSubTotalPrice(basketProducts.getProducts());
double taxPrice = getTaxPrice(subtotal,order.getTax());
}

我认为让您对 EventBus 机制有点困惑的原因是 sticky 标志。看看http://greenrobot.org/eventbus/documentation/configuration/sticky-events/有关详细信息。

关于java - EventBus - 事件生命周期的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57193587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com