Why “doOnError” not working until “err->{}” is not passed to “subscribe()” method
I have a following transformation function:
private MutableLiveData<ApiError> apiError = new MutableLiveData<>();
private MutableLiveData<ApiProgress> apiProgress = new MutableLiveData<>();
private CompositeDisposable compositeDisposable = new CompositeDisposable();
// Emit "progress's start" on subscribe and "progress's end" on after success or error.
// Add this to the observable action sequence with ".compose(baseTransformer())" before subscribe.
<T> SingleTransformer<T, T> baseTransformer() {
return upstream -> upstream
.doOnSubscribe(disposable -> {
compositeDisposable.add(disposable);
apiProgress.setValue(ApiProgress.start());
})
.doFinally(() -> apiProgress.setValue(ApiProgress.stop()))
.doOnError(err -> {
apiError.setValue(ApiError.create(err));
});
}
and I am using this function here:
authRepository.login(userName, password)
.compose(baseTransformer())
.subscribe(login -> {
loginData.setValue(login);
});
Problem: My application crashes when trying to login.
Solution
authRepository.login(userName, password)
.compose(baseTransformer())
.subscribe(login -> {
loginData.setValue(login);
}, err -> {});
I don't know why it fixes the problem as "doOnError" should not be dependent on this lambda("err -> {}") to catch the error.
Please suggest any alternative.
android rx-java rx-android
|
show 5 more comments
I have a following transformation function:
private MutableLiveData<ApiError> apiError = new MutableLiveData<>();
private MutableLiveData<ApiProgress> apiProgress = new MutableLiveData<>();
private CompositeDisposable compositeDisposable = new CompositeDisposable();
// Emit "progress's start" on subscribe and "progress's end" on after success or error.
// Add this to the observable action sequence with ".compose(baseTransformer())" before subscribe.
<T> SingleTransformer<T, T> baseTransformer() {
return upstream -> upstream
.doOnSubscribe(disposable -> {
compositeDisposable.add(disposable);
apiProgress.setValue(ApiProgress.start());
})
.doFinally(() -> apiProgress.setValue(ApiProgress.stop()))
.doOnError(err -> {
apiError.setValue(ApiError.create(err));
});
}
and I am using this function here:
authRepository.login(userName, password)
.compose(baseTransformer())
.subscribe(login -> {
loginData.setValue(login);
});
Problem: My application crashes when trying to login.
Solution
authRepository.login(userName, password)
.compose(baseTransformer())
.subscribe(login -> {
loginData.setValue(login);
}, err -> {});
I don't know why it fixes the problem as "doOnError" should not be dependent on this lambda("err -> {}") to catch the error.
Please suggest any alternative.
android rx-java rx-android
doOnError
lets you peek into the error channel but is does not consume the error. You still need anonError
callback oronErrorX
operator to really handle the error.
– akarnokd
Nov 20 '18 at 10:42
Got it. Thanks.
– Vatish Sharma
Nov 20 '18 at 11:19
Actually the example here: baeldung.com/rxjava-error-handling
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is wrong...
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is correct. It alters external state but the testObserver still receives the error.
– akarnokd
Nov 20 '18 at 12:16
|
show 5 more comments
I have a following transformation function:
private MutableLiveData<ApiError> apiError = new MutableLiveData<>();
private MutableLiveData<ApiProgress> apiProgress = new MutableLiveData<>();
private CompositeDisposable compositeDisposable = new CompositeDisposable();
// Emit "progress's start" on subscribe and "progress's end" on after success or error.
// Add this to the observable action sequence with ".compose(baseTransformer())" before subscribe.
<T> SingleTransformer<T, T> baseTransformer() {
return upstream -> upstream
.doOnSubscribe(disposable -> {
compositeDisposable.add(disposable);
apiProgress.setValue(ApiProgress.start());
})
.doFinally(() -> apiProgress.setValue(ApiProgress.stop()))
.doOnError(err -> {
apiError.setValue(ApiError.create(err));
});
}
and I am using this function here:
authRepository.login(userName, password)
.compose(baseTransformer())
.subscribe(login -> {
loginData.setValue(login);
});
Problem: My application crashes when trying to login.
Solution
authRepository.login(userName, password)
.compose(baseTransformer())
.subscribe(login -> {
loginData.setValue(login);
}, err -> {});
I don't know why it fixes the problem as "doOnError" should not be dependent on this lambda("err -> {}") to catch the error.
Please suggest any alternative.
android rx-java rx-android
I have a following transformation function:
private MutableLiveData<ApiError> apiError = new MutableLiveData<>();
private MutableLiveData<ApiProgress> apiProgress = new MutableLiveData<>();
private CompositeDisposable compositeDisposable = new CompositeDisposable();
// Emit "progress's start" on subscribe and "progress's end" on after success or error.
// Add this to the observable action sequence with ".compose(baseTransformer())" before subscribe.
<T> SingleTransformer<T, T> baseTransformer() {
return upstream -> upstream
.doOnSubscribe(disposable -> {
compositeDisposable.add(disposable);
apiProgress.setValue(ApiProgress.start());
})
.doFinally(() -> apiProgress.setValue(ApiProgress.stop()))
.doOnError(err -> {
apiError.setValue(ApiError.create(err));
});
}
and I am using this function here:
authRepository.login(userName, password)
.compose(baseTransformer())
.subscribe(login -> {
loginData.setValue(login);
});
Problem: My application crashes when trying to login.
Solution
authRepository.login(userName, password)
.compose(baseTransformer())
.subscribe(login -> {
loginData.setValue(login);
}, err -> {});
I don't know why it fixes the problem as "doOnError" should not be dependent on this lambda("err -> {}") to catch the error.
Please suggest any alternative.
android rx-java rx-android
android rx-java rx-android
asked Nov 20 '18 at 10:16
Vatish Sharma
47
47
doOnError
lets you peek into the error channel but is does not consume the error. You still need anonError
callback oronErrorX
operator to really handle the error.
– akarnokd
Nov 20 '18 at 10:42
Got it. Thanks.
– Vatish Sharma
Nov 20 '18 at 11:19
Actually the example here: baeldung.com/rxjava-error-handling
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is wrong...
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is correct. It alters external state but the testObserver still receives the error.
– akarnokd
Nov 20 '18 at 12:16
|
show 5 more comments
doOnError
lets you peek into the error channel but is does not consume the error. You still need anonError
callback oronErrorX
operator to really handle the error.
– akarnokd
Nov 20 '18 at 10:42
Got it. Thanks.
– Vatish Sharma
Nov 20 '18 at 11:19
Actually the example here: baeldung.com/rxjava-error-handling
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is wrong...
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is correct. It alters external state but the testObserver still receives the error.
– akarnokd
Nov 20 '18 at 12:16
doOnError
lets you peek into the error channel but is does not consume the error. You still need an onError
callback or onErrorX
operator to really handle the error.– akarnokd
Nov 20 '18 at 10:42
doOnError
lets you peek into the error channel but is does not consume the error. You still need an onError
callback or onErrorX
operator to really handle the error.– akarnokd
Nov 20 '18 at 10:42
Got it. Thanks.
– Vatish Sharma
Nov 20 '18 at 11:19
Got it. Thanks.
– Vatish Sharma
Nov 20 '18 at 11:19
Actually the example here: baeldung.com/rxjava-error-handling
– Vatish Sharma
Nov 20 '18 at 11:20
Actually the example here: baeldung.com/rxjava-error-handling
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is wrong...
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is wrong...
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is correct. It alters external state but the testObserver still receives the error.
– akarnokd
Nov 20 '18 at 12:16
3.1 is correct. It alters external state but the testObserver still receives the error.
– akarnokd
Nov 20 '18 at 12:16
|
show 5 more comments
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53390754%2fwhy-doonerror-not-working-until-err-is-not-passed-to-subscribe-metho%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53390754%2fwhy-doonerror-not-working-until-err-is-not-passed-to-subscribe-metho%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
doOnError
lets you peek into the error channel but is does not consume the error. You still need anonError
callback oronErrorX
operator to really handle the error.– akarnokd
Nov 20 '18 at 10:42
Got it. Thanks.
– Vatish Sharma
Nov 20 '18 at 11:19
Actually the example here: baeldung.com/rxjava-error-handling
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is wrong...
– Vatish Sharma
Nov 20 '18 at 11:20
3.1 is correct. It alters external state but the testObserver still receives the error.
– akarnokd
Nov 20 '18 at 12:16