Ich versuche, meine Recycler Ansicht, dass, wenn die Plus-Taste auf einer seiner Elemente zu aktualisieren, eine Menge Textansicht auf das Element geklickt wird um 1 erhöhtRealm Schreiben nicht, weil bereits die Durchführung Schreiboperation
Hier ist der Code für den Klick-Listener im Adapter.
holder.mQuantityPlusTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mEventBus.post(new CartQuantityPlusClickEvent(imgUrl));
notifyDataSetChanged();
}
});
Hier ist der Code für die Aktivität, die den EventBus abonniert.
@Subscribe(threadMode = ThreadMode.POSTING)
public void cartQuantityPlusClick(CartQuantityPlusClickEvent event) {
mClothingRepository.plusClothingCartQuantity(event.getImgUrl());
}
Hier ist der Code für die tatsächliche Mengenaktualisierung.
@Override
public void plusClothingCartQuantity(String imgUrl) {
CartItem item = mRealm.where(CartItem.class).equalTo("imgUrl", imgUrl).findFirst();
mRealm.beginTransaction();
if (item != null)
item.increasQuantity(); Log.d(TAG, item.getQuantityInCart() + "");
mRealm.commitTransaction();
}
Wenn ich die App ausführen und die Taste drücken. Es tritt keine Mengenänderung auf, obwohl genau derselbe Code verwendet wird wie die Menge, die funktioniert.
Hier ist der Code für die Verringerung der Menge (der Code für den Adapter und Event-Bus ist praktisch gleich).
@Override
public void minusClothingCartQuantity(String imgUrl) {
CartItem item = mRealm.where(CartItem.class).equalTo("imgUrl", imgUrl).findFirst();
mRealm.beginTransaction();
if (item != null) {
if (item.getQuantityInCart() == DEFAULT_CART_ITEM_QUANTITY) {
item.deleteFromRealm();
} else
item.decreaseQuantity();
}
RealmResults<CartItem> cartItems = mRealm.where(CartItem.class).findAll();
if (cartItems.size() == 0)
mEventBus.post(new EmptyCartEvent());
mRealm.commitTransaction();
}
Die Anweisungslog im Code für die Menge erhöht wird, so dass die item
Variablen und dass null sind:
12-29 12:25:31.881 21538-21538/com.geteven.gooddeal E/REALM_JNI: jni: ThrowingException 8, The Realm is already in a write transaction in /Users/cm/Realm/realm-java-release/realm/realm-library/src/main/cpp/io_realm_internal_OsSharedRealm.cpp line 126, .
12-29 12:25:31.882 21538-21538/com.geteven.gooddeal E/REALM_JNI: Exception has been thrown: The Realm is already in a write transaction in /Users/cm/Realm/realm-java-release/realm/realm-library/src/main/cpp/io_realm_internal_OsSharedRealm.cpp line 126
12-29 12:25:31.884 21538-21538/com.geteven.gooddeal E/EventBus: Could not dispatch event: class com.geteven.gooddeal.event.CartQuantityPlusClickEvent to subscribing class class com.geteven.gooddeal.view.CartActivity
java.lang.IllegalStateException: The Realm is already in a write transaction in /Users/cm/Realm/realm-java-release/realm/realm-library/src/main/cpp/io_realm_internal_OsSharedRealm.cpp line 126
at io.realm.internal.OsSharedRealm.nativeBeginTransaction(Native Method)
at io.realm.internal.OsSharedRealm.beginTransaction(OsSharedRealm.java:282)
at io.realm.BaseRealm.beginTransaction(BaseRealm.java:389)
at io.realm.Realm.beginTransaction(Realm.java:135)
at com.geteven.gooddeal.repository.ClothingRepository.plusClothingCartQuantity(ClothingRepository.java:145)
at com.geteven.gooddeal.view.CartActivity.cartQuantityPlusClick(CartActivity.java:190)
at java.lang.reflect.Method.invoke(Native Method)
at org.greenrobot.eventbus.EventBus.invokeSubscriber(EventBus.java:485)
at org.greenrobot.eventbus.EventBus.postToSubscription(EventBus.java:416)
at org.greenrobot.eventbus.EventBus.postSingleEventForEventType(EventBus.java:397)
at org.greenrobot.eventbus.EventBus.postSingleEvent(EventBus.java:370)
at org.greenrobot.eventbus.EventBus.post(EventBus.java:251)
at com.geteven.gooddeal.adapter.CartAdapter$3.onClick(CartAdapter.java:122)
at android.view.View.performClick(View.java:6289)
at android.view.View$PerformClick.run(View.java:24800)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6809)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
ich meine Reich-Instanz aus dem Konstruktor der Repository-Klasse, in der all Business-Logik erhalten ist beinhaltet.
public ClothingRepository() {
mEventBus = EventBus.getDefault();
mRealm = Realm.getDefaultInstance();
mClothingRef = FirebaseDatabase.getInstance().getReference()
.child(FIREBASE_CLOTHING_REFERENCE);
}
Ich schließe es nicht, weil ich nicht sicher bin, wie. Ich denke, das könnte Teil des Problems sein. Wie behebe ich das?
anrufen * Ich bin nicht sicher, wie man * - rufen 'mRealm.close()' –
Ja, aber wenn ich nenne 'mRealm.close()' kann ich es immer noch verwenden später? –
nein. Lesen Sie die Dokumentation –