¿Es necesario darse de baja?

Tengo dificultades para comprender RX. En el caso siguiente, ¿es necesario darse de baja? ¿Hay una manera de cancelar automáticamente la suscripción después de que se ejecutó la función de "llamada"?

Observable.create(new Observable.OnSubscribe<NumberInfo>() { @Override public void call(Subscriber<? super NumberInfo> subscriber) { try { // Store data to db } catch (Exception e) { Log.e(TAG, "Downloaded numberInfo was not added to cache.", e); } } }).subscribeOn(Schedulers.newThread()) .subscribe(); 

No quiero observar por ningún resultado que es por eso que omitido el clásico .observeOn(AndroidSchedulers.mainThread())

Thx para la explicación.

2 Solutions collect form web for “¿Es necesario darse de baja?”

De acuerdo con el contrato de Rx, cuando el Observable dispara onCompleted , el Observer onCompleted la suscripción. En su caso, el contrato no se respeta porque no hay subscriber.onCompleted() en su código.

Si solo necesitas algo como "Fuego y olvídate", puedes intentar solo:

 Schedulers.io().createWorker().schedule(new Action0() { @Override public void call() { try { // Store data to db } catch (Exception e) { Log.e(TAG, "Downloaded numberInfo was not added to cache.", e); } } }); 

Se ejecutará en el programador de E / S y su subproceso de interfaz de usuario es seguro.

OMI siempre debe tener un valor de retorno. Los Store data to db enrutamiento de Store data to db seguramente tienen algún valor de retorno, como un long especificando el número de fila o un boolean que indica éxito . Con este enfoque, puede crear un método adecuado:

 public Observable<Long> storeToDb(final SomethingToStore storeMe) { return Observable .create(new Observable.OnSubscribe<Long>() { @Override public void call(Subscriber<? super Long> subscriber) { long row = syncStore(storeMe); if (row == -1) { subscriber.onError(new Throwable("Cannot store " + storeMe.toString + " to DB.")); } subscriber.onNext(row); subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); } 

Y puedes usarlo así:

 storeToDb(storeThis) .subscribe(new Observer<Long>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.e("STORING", "Something went south: " + e.getMessage()); } @Override public void onNext(Long row) { Log.d("STORING", "Everything has been stored as record number: " + row); } }); 

Cuando se completa Observable, RxJava se cancela automáticamente. Necesita llamar a subscriber.onComplete() para realizar la suscripción automática.

  • Obtenga el objeto JSON uno por uno desde la matriz JSON en Android utilizando Retrofit y RxJava
  • Reino se cierra
  • OnNext comience otro Observable
  • RxJava como un bus de eventos, onNext se llama varias veces cuando sólo un mensaje de evento
  • ¿Cuál es la diferencia entre RxJava y Bolts?
  • Uso de Mockito con Retrofit 2.0
  • RxJava y MVP en la aplicación para Android
  • Utilizando RxJava para la validación de inicio de sesión de correo electrónico, un observable está emitiendo dos veces
  • ¿Cuál es la mejor manera de depurar los problemas de RxJava con mensajes no recibidos?
  • Retrofit no puede crear adaptador de llamada
  • RxJava + retrofit, obtenga una lista y agregue información adicional para cada artículo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.