
问题在于我们希望全局处理它,而不是围绕每个请求编写重复的代码.使用onErrorResumeNext()如a.bertucci在 this question中所描述的那样,可观察的视图事件看起来很完美但不幸的是它在Retrofit.IDle线程中运行并且无法启动任何UI元素.有可能解决这个问题吗?
一个失败的例子:
public static <T> Func1<Throwable,? extends Observable<? extends T>> retryOnNetworkError(final Activity activity,final Observable<T> toBeResumed) { return new Func1<Throwable,Observable<? extends T>>() { @OverrIDe public Observable<? extends T> call(Throwable throwable) { if (throwable instanceof RetrofitError && RetrofitUtils.isNetworkError((RetrofitError) throwable)) { return dialog(activity,R.string.dialog_Title_network_error,R.string.dialog_msg_network_error) .filter(ok -> ok) .flatMap(ok -> toBeResumed); } return Observable.error(throwable); } };}public static Observable<Boolean> dialog(Context context,int Title,int message) { return Observable.create((Subscriber<? super Boolean> subscriber) -> { final AlertDialog ad = new AlertDialog.Builder(context) .setTitle(Title) .setMessage(message) .setPositivebutton(androID.R.string.ok,(dialog,which) -> { subscriber.onNext(true); subscriber.onCompleted(); }) .setNegativebutton(androID.R.string.cancel,which) -> { subscriber.onNext(false); subscriber.onCompleted(); }) .create(); // cleaning up subscriber.add(Subscriptions.create(ad::dismiss)); ad.show(); });}解决方法 您无法在Oservable中显示UI元素,您需要在UI线程上运行它.我遇到了同样的错误,我使用过: Activity.runOnUiThread(new Runnable() { @OverrIDe public voID run() { AlertDialog(Activity,"information : ",R.drawable.Box_info,"Empty !").show; } }); public Observable<Boolean> add(Objet myObj) { return Observable.create(new Observable.OnSubscribeFunc<Boolean>() { @OverrIDe public Subscription onSubscribe(Observer<? super Boolean> observer) { System.out.println("In Observable ! "); try { observer.onNext(MyObjet.callmethod()); //callMethod retunr a booleanmActivity.runOnUiThread(new Runnable() { @OverrIDe public voID run() { MyAlertDialog(mActivity,"My Title : ","My Text"); } }); observer.onCompleted(); } catch (Exception e) { observer.onError(e); e.printstacktrace(); } return Subscriptions.empty(); } }).subscribeOn(Schedulers.threadPoolForIO());} 使用此方法,您可以在线程中调用Dialog.
总结以上是内存溢出为你收集整理的android – 使用Retrofit和Rxjava显示网络错误对话框全部内容,希望文章能够帮你解决android – 使用Retrofit和Rxjava显示网络错误对话框所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)