android– 为什么何时使用realm.beginTransaction?由于有executeTransaction和executeTransactionAsync

android– 为什么何时使用realm.beginTransaction?由于有executeTransaction和executeTransactionAsync,第1张

概述例如,如果我有这些代码:Realmrealm=Realm.getDefaultInstance();realm.beginTransaction();mUser.setName("Roy");realm.commitTransaction();textView1.setText(mUser.getName());根据该文档,它表示如果事务内部存在错误,将捕获异常并且不会保留数据.所以在上面的代码

例如,如果我有这些代码:

Realm realm = Realm.getDefaultInstance();realm.beginTransaction();mUser.setname("Roy");realm.commitTransaction();textVIEw1.setText(mUser.getname());

根据该文档,它表示如果事务内部存在错误,将捕获异常并且不会保留数据.所以在上面的代码中,假设mUser.setname中有错误(“Roy”);或者realm.commitTransaction();,不会出现崩溃,代码仍会继续?但是,在这种情况下不会调用cancelTransaction.会发生什么?更新:看起来应用程序不会崩溃,但下次如果你继续从Realm读取内容它会崩溃并告诉你Realm被锁定,因为没有调用commitTransaction.

我只是不知道如果存在可能发生错误的风险,您将使用beginTransaction和commitTransaction的可能性.有alreaday executeTransaction和executeTransactionAsync可以很好地处理它.特别是对于executeTransactionAsync,我猜大多数人都会使用executeTransactionAsync,因为它有onSuccess和onError.

对我来说,我只能想到一个原因:我想做一个简单的数据更新,仍然使用相同的线程.在这种情况下,我将使用:

try {    realm.executeTransaction(new Realm.Transaction() {        @OverrIDe        public voID execute(Realm realm) {            mUser.setname("Roy");        }    });} catch (Exception e) {    Logger.e(TAG, "error", e);    Toast.makeText(getActivity(), R.string.error_occurred, Toast.LENGTH_SHORT).show();    return;}

解决方法:

realm.executeTransaction(new Realm.Transaction() {    @OverrIDe    public voID execute(Realm realm) {       //...    }});

相当于

realm.beginTransaction();try {    //...    realm.commitTransaction();} catch(Throwable e) {    if(realm.isInTransaction()) {        realm.cancelTransaction();    }    throw e;}

所以如果你问我,begin / commit容易出错,如果没有catch {cancel ..}子句你就不应该使用它.

至于在失败的情况下不调用cancelTransaction(),我刚刚结束了一旦我开始调用cancelTransaction()就停止发生的神秘问题,但那是一段时间之前.

总结

以上是内存溢出为你收集整理的android – 为什么/何时使用realm.beginTransaction?由于有executeTransaction和executeTransactionAsync全部内容,希望文章能够帮你解决android – 为什么/何时使用realm.beginTransaction?由于有executeTransaction和executeTransactionAsync所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1111206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存