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

时间:2018-07-17 02:04:38

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

我的问题

  1. RX Java错误处理是否会自动捕获Realm处理其功能期间发生的错误?

  2. RX Java错误处理是否更好,是否应该替换try-catch异常错误处理?

  3. 基于下面的实现,我应该删除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))
            }
        })
    }

领域实施

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()
    }
}

1 个答案:

答案 0 :(得分:0)

我继续继续上面的实现,并删除了Realm实现的try-catch,我故意触发了一个错误,似乎RXJava可以在onError捕获来自Realm的错误

我个人会得出以下结论:

  1. 是的,RX Java错误处理将自动捕获Realm处理其功能期间发生的错误。

  2. 到目前为止,对于我来说,RX Java可以处理catch错误,因此为了我自己的方便,我会选择RX Java错误处理,而不是Realm try-catch异常错误处理。

  3. 由于我使用了RX Java错误处理,因此我认为不再需要Realm try-catch错误处理。