RxAndroid & Retrofit Mejor aproximación para el manejo de errores

Tengo algunas dudas sobre un enfoque que estoy intentando implementar en una aplicación para Android.

Los servicios de la aplicación pueden enviar un código de error http cuando un usuario ha perdido su sesión o ha caducado.

Ya que soy nuevo en RxAndroid tengo dudas sobre cómo implementar una forma genérica de manejarlo con un observable genérico.

Las llamadas al servidor pueden realizarse en una clase Presenter o Manager y la idea es notificar la actividad.

Sería un buen enfoque para utilizar Rx Android como el autobús de eventos para notificar cuando el servidor envía este error?

La idea es que cada actividad se suscriba a escuchar los errores, y en caso de que obtengamos una excepción HttpException podríamos comunicarnos con la actividad usando RxAndroid como Event Bus?

Aquí está la solución para usted. Funcionará bajo la suposición de que Dagger 2 se implementará correctamente. Cuanto antes lo hagas, mejor para ti.

Cree una clase Singleton SampleDAO (Google DAO patrón Android). Esta clase será responsable de realizar la solicitud del API. Inyecte esta clase dentro del servicio o donde quiera y realice la solicitud de API a través de la estimulación del objeto performRequest como este – sampleDao.performRequest (). OnNext (null);

import android.support.annotation.NonNull; import javax.inject.Singleton; import rx.Observable; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; import rx.subjects.PublishSubject; @Singleton public class SampleDao { @NonNull PublishSubject<Object> performRequest = PublishSubject.create(); @NonNull Observable<SomeData> apiResponse; public SampleDao(final @NonNull ApiService apiService) { apiResponse = performRequest .switchMap(new Func1<Object, Observable<SomeData>>() { @Override public Observable<SomeData> call(Object o) { return apiService.apiRequest() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()); } }); } @NonNull public Observable<SomeData> getApiResponse() { return apiResponse; } @NonNull public Observer<Object> performRequest() { return performRequest; } } 

Tienes que crear presentador también. En este pasador pasar SampleDao como una referencia al constructor (Dagger 2 manejar esto).

 import android.support.annotation.NonNull; import rx.Observable; public class SamplePresenter { @NonNull private final Observable<SomeData> someDataObservable; public SamplePresenter(SampleDao sampleDao) { someDataObservable = sampleDao.getApiResponse(); } @NonNull public Observable<SomeData> getSomeDataObservable() { return someDataObservable; } } 

Inyectar presentador en la Actividad / Fragmento en el que desea manejar la respuesta o el error.

 import android.os.Bundle; import android.widget.Toast; import com.trello.rxlifecycle.components.RxActivity; import javax.inject.Inject; import rx.Subscriber; public class MainActivity extends RxActivity { @Inject SamplePresenter samplePresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); samplePresenter.getSomeDataObservable() .compose(this.<SomeData>bindToLifecycle()) .subscribe(new Subscriber<SomeData>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { final ErrorHelper errorHelper = new ErrorHelper(getResources(), e); Toast.makeText(MainActivity.this, errorHelper.getErrorMessage(), Toast.LENGTH_SHORT).show(); } @Override public void onNext(SomeData someData) { } }); } } 
  • Hilo predeterminado de actualización
  • Hacer cola de tareas con RxJava en Android
  • RxJava / RxBinding: cómo manejar los errores en RxView
  • Escritura de pruebas síncronas para Rx v2 Flowable
  • rxjava interval () tiempo de reinicio después de algún evento
  • Compartiendo RxBindings Eventos observables entre múltiples suscriptores
  • ¿Cómo reconstruir o restablecer caché Observable, utilizado con Retrofit para obtener nuevos datos?
  • Solicitudes HTTP periódicas con RxJava y Retrofit
  • Configuración de RxJava para enviar datos a la actividad de GCMListenerService
  • RxAndroid filter Observable <List <Item >>
  • No se puede eliminar la acción javaCompile antigua, tal vez el nombre de la clase ha cambiado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.