Tôi có API Retrofit sau:Retrofit POST Realm đối tượng
@POST("/payments")
Observable<Response> saveCreditCard(@Body CreditCard creditCard)
CreditCard
là một RealmObject
.
Khi tôi cố gắng sử dụng phương pháp API của tôi:
CreditCard card = realm.createObject(CreditCard.class);
card.setWhateverField(...);
...
mApi.saveCreditCard(card)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(...);
tôi nhận được lỗi sau:
> retrofit.RetrofitError: com.fasterxml.jackson.databind.JsonMappingException: Realm access from incorrect thread. Realm objects can only be accessed on the thread they where created.
System.err﹕ at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:400)
System.err﹕ at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
System.err﹕ at retrofit.RestAdapter$RestHandler$1.invoke(RestAdapter.java:265)
System.err﹕ at retrofit.RxSupport$2.run(RxSupport.java:55)
System.err﹕ at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
System.err﹕ at retrofit.Platform$Android$2$1.run(Platform.java:142)
System.err﹕ at java.lang.Thread.run(Thread.java:818)
System.err﹕ Caused by: java.lang.AssertionError: com.fasterxml.jackson.databind.JsonMappingException: Realm access from incorrect thread. Realm objects can only be accessed on the thread they where created.
Tôi giả định Retrofit mà là làm serialization để JSON
trên io()
lên lịch, vì thế lỗi.
Có ai có đề xuất nào về cách khắc phục sự cố luồng của Realm không?
Dường như bạn phải có mô hình cho Realm và mô hình thứ hai để trang bị thêm và có lớp để "chuyển đổi" đối tượng này với nhau. – Divers
Chúng tôi có hơn 50 mô hình, vì vậy đó không thực sự là một giải pháp. –
Tôi hiểu, nhưng cơ hội lớn đó chỉ là giải pháp. – Divers