首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从RealmRecyclerViewAdapter中删除领域对象

从RealmRecyclerViewAdapter中删除领域对象
EN

Stack Overflow用户
提问于 2016-11-23 21:03:11
回答 1查看 479关注 0票数 0

我得到了很多IllegalStateExceptions,它们对我来说很难调试。当我从RealmAdapter中删除一个领域对象时,就会发生这种情况。对于RealmAdapter,我使用的是'io.realm:android-adapters:1.3.0‘版本。

这就是我在适配器中长按时删除对象的方法:

代码语言:javascript
运行
复制
    //Delete message object
    new MaterialDialog.Builder(holder.cardView.getContext()).title("Delete")
            .content("Delete message?")
            .positiveText("YES")
            .negativeText("Cancel")
            .onPositive(new MaterialDialog.SingleButtonCallback() {
                @Override
                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

                    //Call delete
                    ApiManager.ApiManagerService apiManagerService = ApiManager.createService(ApiManager.ApiManagerService.class);
                    apiManagerService.deleteMessage(message.getId()).enqueue(new Callback<Void>() {
                        @Override
                        public void onResponse(Call<Void> call, Response<Void> response) {
                            Logger.d("delete message onResponse callback");

                            //Delete from realm
                            Realm realm = Realm.getDefaultInstance();
                            realm.beginTransaction();
                            try {
                                message.deleteFromRealm();
                            } catch(Exception e) {
                                e.printStackTrace();
                            }
                            realm.commitTransaction();

                            //Notify adapter
                            notifyDataSetChanged();
                        }

                        @Override
                        public void onFailure(Call<Void> call, Throwable t) {
                            Logger.d("delete message onFailure callback");
                        }
                    });
                }
            })
            .show();

    return false;
}

从适配器内部删除对象的正确方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-11-24 04:01:13

代码语言:javascript
运行
复制
                    @Override
                    public void onResponse(Call<Void> call, Response<Void> response) {
                        Logger.d("delete message onResponse callback");

                        //Delete from realm
                        Realm realm = Realm.getDefaultInstance();
                        realm.beginTransaction();
                        try {
                            message.deleteFromRealm();
                        } catch(Exception e) {
                            e.printStackTrace();
                        }
                        realm.commitTransaction();

                        //Notify adapter
                        notifyDataSetChanged();
                    }

应该是

代码语言:javascript
运行
复制
                    @Override
                    public void onResponse(Call<Void> call, Response<Void> response) {
                        Logger.d("delete message onResponse callback");

                        //Delete from realm
                        final long messageId = message.getId();
                        Realm realm = Realm.getDefaultInstance(); // TODO: use Realm bound to lifecycle
                        realm.executeTransactionAsync(new Realm.Transaction() {
                             @Override
                             public void execute(Realm realm) {
                                 realm.where(Message.class).equalTo("messageId", messageId).findAll().deleteAllFromRealm();
                             }
                        });
                        realm.close();

                        //Notify adapter
                        ////notifyDataSetChanged();
                    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40765322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档