Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.