0

我想将每个 RealmResults 数据发布到一个 REST 端点,如果发送成功,我想删除它的数据。

运行以下代码,发送成功但删除失败。
我尝试使用target.deleteFromRealm()inResponse()但发生了 IllegalStateException。

java.lang.IllegalStateException: Realm access from incorrect thread. 
        Realm objects can only be accessed on the thread they were created.

我怎样才能删除target?(使用 Realm Java 3.1.2 和 Retrofit 2.2.0)

RealmResults<Model> results = realm.where(Model.class).findAll();
for ( final Model target: results ){
    Call<Void> task = restInterface.post(gson.toJson(target));
    task.enqueue( new CallBack<Void>(){
        @Override
        public void onResponse(Call<Void> call, Response<Void> response) {
            // ?? how to delete target from realm ??
        }

        @Override
        public void onFailure(Call<Void> call, Throwable t) {
            // do nothing
        }
    });
}
4

1 回答 1

0

这与删除普通 ArrayList 的项目相同。这也是不允许的,并且会抛出 ConcurrentModificationException。

另外我建议不要将项目一一发送到服务器,而是将它们收集到数组中并在一个请求中传递所有数据。

要将所有数据收集到 ArrayList 中,您可以使用

RealmResults<Model> results = realm.where(Model.class).findAll();
ArrayList<Model> list = new ArrayList(results);

然后尝试像这样发送数据:

Call<Void> task = restInterface.post(gson.toJson(list));
    task.enqueue( new CallBack<Void>(){
        @Override
        public void onResponse(Call<Void> call, Response<Void> response) {
            // As a result all data will be uploaded in the same one batch and you can safely clear the db
             results.deleteAllFromRealm();
        }

        @Override
        public void onFailure(Call<Void> call, Throwable t) {
            // do nothing
        }
    });
于 2017-04-18T18:11:39.867 回答