Ich habe eine Methode, die einen Emitter wie unten erstellt, gibt es ein Problem (vielleicht ist es normales Verhalten) mit dem Aufruf von onError in Retrofit Callback. Ich habe UndeliverableException erhalten, wenn ich versuche, OnError aufzurufen.Nicht zustellbarException beim Aufruf von onError von ObservableEmitter in RXjava2
Ich kann das lösen, indem ich subscriber.isDiposed() überprüfe, indem ich mich frage, wie onError coz anrufen kann, muss ich meine UI-Ebene benachrichtigen.
- Zusatz 1
--> RxJava2CallAdapterFactoryalready implemented private static Retrofit.Builder builderSwift = new Retrofit.Builder() .baseUrl(URL_SWIFT) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .addConverterFactory(new ToStringConverterFactory()); --> When i added below code to application class app won't crash --> but i get java.lang.exception instead of my custom exception RxJavaPlugins.setErrorHandler(Functions<Throwable>emptyConsumer()); @Override public void onFileUploadError(Throwable e) { Log.d(TAG, "onFileUploadError: " + e.getMessage()); }
public Observable<UploadResponseBean> upload(final UploadRequestBean uploadRequestBean, final File file) {
return Observable.create(new ObservableOnSubscribe<UploadResponseBean>() {
@Override
public void subscribe(@NonNull final ObservableEmitter<UploadResponseBean> subscriber) throws Exception {
// ---> There are no problem with subscriber while calling onError
// ---> Retrofit2 service request
ftsService.upload(token, uploadRequestBean, body).enqueue(new Callback<UploadResponseBean>() {
@Override
public void onResponse(Call<UploadResponseBean> call, Response<UploadResponseBean> response) {
if (response.code() == 200){
// ---> calling onNext works properly
subscriber.onNext(new UploadResponseBean(response.body().getUrl()));
}
else{
// ---> calling onError throws UndeliverableException
subscriber.onError(new NetworkConnectionException(response.message()));
}
}
@Override
public void onFailure(Call call, Throwable t) {
subscriber.onError(new NetworkConnectionException(t.getMessage()));
}
});
}
});
}
Dank für Ihre Antwort, ich hinzugefügt, um zusätzliche Informationen können schauen Sie auf, dass ich auch dieses Problem bin Überprüfung, aber ich konnte nicht eine Lösung finden https://github.com/ReactiveX/RxJava/issues/ 4863 – Talha
Ich habe das Problem gefunden. Es gibt eine Fehlerkontrollmethode in der Retrofit-Antwort und ich erkenne, dass ich onError zweimal trigge, weil ich diese Ausnahme für den zweiten Trigger bekommen habe. Wie Sie gesagt haben, habe ich den Abonnenten vorher abgesetzt. – Talha