RxJava2 Single 내부에서 Throw 된 RuntimeException이 catch되지 않고 관찰자가 삭제 된 경우 Observer의 onError() 메서드로 전송되지 않습니다.
CompositeDisposable.dispose()를 호출하면 내 가입자의 onSuccess 또는 onError 메서드가 호출되지 않지만 예외는 무시되어서는 안된다는 것을 이해합니다. 대신 RuntimeException이 잡히지 않기 때문에 응용 프로그램이 충돌합니다.RuntimeException throw되고 RxJava2에서 catch되지 않음 처분 된 후 단일
여기에 코멘트가있는 줄은 RuntimeException을 던질 수 있습니다. 예외가 .dispose() 메소드를 호출하기 전에 던져지면 잡히고 오류가 구독자에게 전송되지만, .dispose()를 호출 한 후 예외가 발생합니다. 앱이 다운됩니다. 내가 가입
public Single<Submission> getSubmission(final String threadId, final CommentSort sort) {
return Single.create(new SingleOnSubscribe<Submission>() {
@Override
public void subscribe(SingleEmitter<Submission> e) throws Exception {
// some irrelevant code
try {
submission = reddit.getSubmission(sr); // Can throw RuntimeException
e.onSuccess(submission);
} catch (Exception ex) {
e.onError(ex);
}
}
});
}
코드 :
disposables.add(someCompletable
.andThen(service.getSubmission(threadId, CommentSort.HOT))
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.ui())
.subscribeWith(new DisposableSingleObserver<Submission>() {
@Override
public void onSuccess(Submission submission) {
// Handle result
}
@Override
public void onError(Throwable e) {
// Handle error
}
})
);
스택 트레이스 : 답을 찾을 수
E/AndroidRuntime: FATAL EXCEPTION: RxCachedThreadScheduler-2
Process: com.gmail.jorgegilcavazos.ballislife.debug, PID: 15242
java.lang.RuntimeException: Unable to parse JSON: [{"kind": "Listing", "data": {"modhash": null, "children": [{"kind": "t3", "data
at net.dean.jraw.util.JrawUtils.fromString(JrawUtils.java:182)
at net.dean.jraw.http.RestResponse.<init>(RestResponse.java:64)
at net.dean.jraw.http.OkHttpAdapter.execute(OkHttpAdapter.java:81)
at net.dean.jraw.http.RestClient.execute(RestClient.java:120)
at net.dean.jraw.RedditClient.execute(RedditClient.java:143)
at net.dean.jraw.RedditClient.execute(RedditClient.java:137)
at net.dean.jraw.RedditClient.getSubmission(RedditClient.java:287)
at com.gmail.jorgegilcavazos.ballislife.network.API.RedditService$10.subscribe(RedditService.java:311)
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)
at io.reactivex.Single.subscribe(Single.java:2656)
at io.reactivex.internal.operators.single.SingleDelayWithCompletable$OtherObserver.onComplete(SingleDelayWithCompletable.java:70)
at io.reactivex.internal.disposables.EmptyDisposable.complete(EmptyDisposable.java:67)
at io.reactivex.internal.operators.completable.CompletableEmpty.subscribeActual(CompletableEmpty.java:27)
at io.reactivex.Completable.subscribe(Completable.java:1592)
at io.reactivex.internal.operators.single.SingleDelayWithCompletable.subscribeActual(SingleDelayWithCompletable.java:36)
at io.reactivex.Single.subscribe(Single.java:2656)
'관련성이없는 코드'를 넣지 않았습니까? – pvg