android - Android RxJava和Realm-RxJava错误处理是否可以捕获Realm发生的错误?

标签 android error-handling realm try-catch rx-java

我的问题

  • RX Java错误处理是否会自动捕获Realm处理其功能期间发生的错误?
  • RX Java错误处理是否更好,是否应该替换try-catch异常错误处理?
  • 基于下面的实现,是否应该删除Realm实现的Try-Catch错误处理,而仅依靠RXJava错误处理?

  • RxJava实现
    override fun getData(context: Context, id: String) {
    
            getDataObservable(context, id)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(object : Observer<String>
                    {
                        override fun onSubscribe(d: Disposable)
                        {
                        }
    
                        override fun onNext(value: String)
                        {
                        }
    
                        override fun onError(e: Throwable)
                        {
                            //  RXJava Error Handling here
                        }
    
                        override fun onComplete()
                        {
                        }
                    })
        }
    
        fun getDataObservable(context: Context, id: String): Observable<String>
        {
            return Observable.defer(object : Callable<ObservableSource<out String>>
            {
                @Throws(Exception::class)
                override fun call(): Observable<String>
                {
                    return Observable.just(realmModel.getDataRealm(context,id))
                }
            })
        }
    

    Realm 实现
    override fun getDataRealm(context: Context, id: String): String {
    
        var realm: Realm? = null
    
        var storeData:String? = null;
    
        try {
            Realm.init(context)
    
            val config = RealmConfiguration.Builder()
                    .name("database.realm")
                    .build()
    
            realm = Realm.getInstance(config)
    
            realm!!.executeTransaction {
    
                val getData = realm.where(database::class.java).equalTo("dataID",id).findAll()      
                storeData = getData.dataName
            }
    
            realm.close()
    
            return storeData
    
        }catch(e:Exception) {
    
            realm?.close()  // Realm Try-Catch Error Handling
    
        }finally {
            realm?.close()
        }
    }
    

    最佳答案

    我继续继续上述实现,并删除了Realm实现的try-catch,我故意触发了一个错误,好像RXJava可以在onError上捕获Realm发生的错误

    我个人会得出以下结论:

  • 是,RX Java错误处理将自动捕获Realm处理其功能期间发生的错误。
  • 到目前为止,对于我来说,RX Java可以处理catch错误,因此,为了我自己的方便,我会选择RX Java错误处理,而不是Realm try-catch异常错误处理。
  • 由于我使用RX Java错误处理,因此我认为不再需要Realm try-catch错误处理。
  • 关于android - Android RxJava和Realm-RxJava错误处理是否可以捕获Realm发生的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51372239/

    相关文章:

    java - 如何制作一个减少数字的函数(例如从 800 毫秒减少到 200 毫秒)

    java - 如何在 Spring MVC 中创建自定义响应处理程序?

    android - Realm Kotlin 迁移 Android String

    android - Realm db ChangeListener 持久性 - 内存泄漏

    ios - 存储单个 RLMObject 实例的最佳方式

    Android 代码检查 : Implement custom inspection

    java - 加密大字节数组

    android - 是否可以在创建项目后在android studio中更改公司域名?

    php - 如何使用PHP处理向用户发送的站点反馈消息(成功/错误)?

    r - downloadHandler在使用R Shiny下载图像时出错