Android领域异常:java.lang.IllegalStateException:对象不再有效,无法对其进行操作。它被另一个线程删除了吗?

时间:2018-07-28 22:05:44

标签: android realm

在使用Realm进行数据库时,代码中出现以下问题。 java.lang.IllegalStateException:对象不再有效,无法对其进行操作。是被另一个线程删除了吗?

我在Google上搜索了很多解决方案,但找不到适合我情况的解决方案。这就是为什么现在在这里粘贴我的代码。我有一个基于回收商视图的订单列表。订单列表项上有一个按钮,用于在成功更新服务器上的订单状态之后通过此方法将订单状态从“提货”更改为“交付”。

public void updateOrderStatus(final Order pOrder, final String newStatus) {

    Realm realm = Realm.getDefaultInstance();
    if (realm != null && !realm.isClosed()) {

        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                Order order = realm
                        .where(Order.class)
                        .equalTo("id", pOrder.id)
                        .findFirst();
                order.status = newStatus;
            }
        });
    }
 }

正在从服务中调用以下方法,该服务具有在某些延迟后运行任务的处理程序。该任务将从服务器获取所有已交付的订单,以将订单标记为已交付,但无法通过列表上的按钮将其标记为已手动交付,因为对于某些订单,状态更新按钮不可用。这些订单将由应用标记为已交付。接收到所有已交付的订单后,服务首先更新数据库,该数据库还将更新以前使用数据库中的上述方法标记为已交付的订单。其次,删除所有已交付的订单。

public void deleteDeliveredOrders() {
    Realm realm = Realm.getDefaultInstance();
    if (realm != null && !realm.isClosed()) {

        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {

                RealmResults<Order> orderRealmResults = realm
                        .where(Order.class)
                        .equalTo("status", Constants.OrderStatus.DELIVERED)
                        .findAll();

                orderRealmResults.deleteAllFromRealm();
            }
        });
    }
}

但是,当此方法调用时,应用会引发提到的错误并崩溃。但是我真的不知道为什么。我搜索了很多,但无济于事。请指导我在做什么错。

谢谢, 苦瓜

0 个答案:

没有答案