第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

單個(gè)觀察者沒有調(diào)用 onError()

單個(gè)觀察者沒有調(diào)用 onError()

函數(shù)式編程 2022-05-25 15:51:19
我在 Android 應(yīng)用程序的 MainActivity 中編寫了以下代碼。當(dāng)我運(yùn)行以下代碼時(shí),它不會拋出任何異常并且 onError() 也不會被調(diào)用。但是我看到onSuccess: testing starts 兩次但我沒有看到onSuccess: testing ends。為什么沒有調(diào)用 onError() 和/或?yàn)槭裁磻?yīng)用程序沒有崩潰?Single.timer(1000, TimeUnit.MILLISECONDS)                .subscribeOn(Schedulers.computation())                .subscribeWith(new DisposableSingleObserver<Long>() {                    @Override                    public void onSuccess(Long initiationTimeStamp) {                        String s = null;                        Log.d(TAG, "onSuccess: testing starts");                        Log.d(TAG, "onSuccess:test  "+ s.isEmpty());                        Log.d(TAG, "onSuccess: testing ends");                    }                    @Override                    public void onError(Throwable e) {                        e.printStackTrace();                    }                });
查看完整描述

2 回答

?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

您正在調(diào)用s.isEmpty()一個(gè)NULL字符串,這就是它在第一次打印時(shí)結(jié)束的原因。也就是說onSuccess()不會拋出任何東西,所以它只是在NullPointerException拋出時(shí)停止執(zhí)行(它在 RxJava 中為你默默地處理)。一旦你訂閱 observable,你就會得到 in 的初始值onSuccess(),然后如果它發(fā)生變化或者你重新訂閱你會得到另一個(gè)值 in onSuccess(),這就是它被調(diào)用兩次的原因。并且因?yàn)槭轻槍Σ僮麈溨邪l(fā)生的錯(cuò)誤,所以在拋出異常時(shí)onError()不會出錯(cuò)。onSuccess()


這種行為是故意的。根據(jù) Rx 合同,觀察者不應(yīng)同時(shí)接收onSuccess()和onError()。您需要自己處理異常onSuccess()。

例如:


Single.timer(1000, TimeUnit.MILLISECONDS)

            .subscribeOn(Schedulers.computation())

            .subscribeWith(new DisposableSingleObserver<Long>() {

                @Override

                public void onSuccess(Long initiationTimeStamp) {

                    try {

                        String s = null;

                        Log.d(TAG, "onSuccess: testing starts");

                        Log.d(TAG, "onSuccess:test  "+ s.isEmpty());

                        Log.d(TAG, "onSuccess: testing ends");

                    }

                    catch (Throwable ex) {

                        // tell the upstream we can't accept any more data (OPTIONAL)

                        dispose();

                        // pass error to error handler

                        onError(ex);

                    }

                }


                @Override

                public void onError(Throwable e) {

                    e.printStackTrace();

                }

            });

祝你好運(yùn) :)


查看完整回答
反對 回復(fù) 2022-05-25
?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

onError用于沿著操作員鏈發(fā)生的錯(cuò)誤。你在里面做的onSuccess已經(jīng)在結(jié)尾了,不會在onError.



查看完整回答
反對 回復(fù) 2022-05-25
  • 2 回答
  • 0 關(guān)注
  • 94 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號