Android 无法使用将RealmObject扩展为常规java对象的java类

Android 无法使用将RealmObject扩展为常规java对象的java类,android,arraylist,android-recyclerview,realm,Android,Arraylist,Android Recyclerview,Realm,我有一个Recyclerview来显示项目列表,我从领域数据库获取数据并将其存储在ArrayList中。但是,当我试图为特定位置更新特定的BoxItem时,它会向我显示如下错误 FATAL EXCEPTION: main Process: one.thebox.android, PID: 7236

我有一个Recyclerview来显示项目列表,我从领域数据库获取数据并将其存储在ArrayList中。但是,当我试图为特定位置更新特定的BoxItem时,它会向我显示如下错误

FATAL EXCEPTION: main                                         Process: one.thebox.android, PID: 7236
                                                              java.lang.IllegalStateException: Changing Realm data can only be done from inside a transaction.
                                                                  at io.realm.internal.Table.throwImmutable(Table.java:1138)
                                                                  at io.realm.internal.Table.checkImmutable(Table.java:924)
                                                                  at io.realm.internal.UncheckedRow.setLong(UncheckedRow.java:195)
                                                                  at io.realm.BoxItemRealmProxy.realmSet$quantity(BoxItemRealmProxy.java:590)
                                                                  at one.thebox.android.Models.BoxItem.setQuantity(BoxItem.java:347)
                                                                  at one.thebox.android.adapter.SearchDetailAdapter$SearchedItemViewHolder.updateQuantityInCart(SearchDetailAdapter.java:870)
                                                                  at one.thebox.android.adapter.SearchDetailAdapter$SearchedItemViewHolder.access$1900(SearchDetailAdapter.java:492)
                                                                  at one.thebox.android.adapter.SearchDetailAdapter$SearchedItemViewHolder$7.onClick(SearchDetailAdapter.java:786)
                                                                  at android.view.View.performClick(View.java:4780)
                                                                  at android.view.View$PerformClick.run(View.java:19866)
                                                                  at android.os.Handler.handleCallback(Handler.java:739)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                  at android.os.Looper.loop(Looper.java:135)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at java.lang.reflect.Method.invoke(Method.java:372)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
请在这里找到一些代码-ArrayList框

boxItem.setQuantity(quantity);
CartHelper.updateQuantityInCart(boxItem, quantity);
boxItems.get(position).setQuantity(quantity);
notifyItemChanged(position);    
此处显示错误,无法修改数组列表中的对象

箱项目-

public class BoxItem extends RealmObject implements Serializable {
 private int quantity;
 @PrimaryKey
private String uuid;

 public String getUuid() {
    return uuid;
}

public void setUuid(String uuid) {
    this.uuid = uuid;
}
   public int getQuantity() {
    return quantity;
}

public void setQuantity(int quantity) {
    this.quantity = quantity;
}
}
CartHelper是一个更新领域数据库中数据的类-

 public static void updateQuantityInCart(final BoxItem boxItem, final int quantity) {
    Realm realm = TheBox.getRealm();
    realm.beginTransaction();
    BoxItem boxItem1 = realm.where(BoxItem.class).equalTo("uuid", boxItem.getUuid()).findFirst();
    if (boxItem1 != null) {
        boxItem1.setQuantity(quantity);
    }
    realm.commitTransaction();
}

updateQuantityInCart()
是适配器类中的一个方法,当我们想要更新recyclerview的任何项时,会调用该方法。例如,如果我们要更新该特定项目的数量,看起来您正在尝试修改事务之外的领域对象,这是不允许的。您应该在任何更新之间添加
beginTransaction()
commitTransaction()
,如
CartHelper.updateQuantityInCart(boxItem,quantity)

在后台线程中执行的另一个最佳方法是:

realm.executeTransactionAsync

是的,
更改领域数据只能从事务内部进行
。如果您使用的是Realm 3.1.4或更高版本,则
realmrecycleServiceAdapter
将处理
notifyItemChanged()
给你打电话。@EpicPandaForce所以你要我试试
RealmRecyclServiceAdapter
,我当前的领域版本是3.1。3@rahul不清楚什么是boxItem/CartHelper及其updateQuantityInCart方法。你应该编辑你的问题以便更清楚我可能弄错了,但是你应该做boxItems.get(position).setQuantity(quantity);首先是CartHelper.updateQuantityInCart(boxItem,quantity);语句wright?@Stallion无关紧要,因为
CartHelper.updateQuantityInCart(boxItem,quantity)实际更新数据库。但是这个
boxItems.get(位置).setQuantity(数量)仅更新列表数据。此行中有错误,`boxItem.setQuantity(quantity);`上面提到了错误。这个函数CartHelper.updateQuantityInCart(boxitem,quantity)正在更新数据库,我正在使用这个内部事务。但是这两行-boxItems.get(position).setQuantity(quantity);(职位)变更;是ArrayList的一部分-在为特定位置更新Boxitem时,我在这里遇到错误。您通常不应该在
ArrayList
中管理RealmProxy,它们应该在
RealmResults
中。
realm.executeTransactionAsync