Articles of rx java2

带有RxJava的Android Room处理空查询结果

尝试使用RxJava适配器测试新的Android Room librarty。 如果我的查询从DB返回0个对象,我想处理结果: 所以这是DAO方法: @Query(“SELECT * FROM auth_info”) fun getAuthInfo(): Flowable 以及我如何处理它: database.authDao().getAuthInfo() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .switchIfEmpty { Log.d(TAG, “IS EMPTY”) } .firstOrError() .subscribe( { authResponse -> Log.d(TAG, authResponse.token) }, { error -> Log.d(TAG, error.message) }) 我的数据库是空的,所以我希望.switchIfEmty()可以工作,但没有一个处理方法被触发。 既没有.subscribe()也没有.switchIfEmpty()

带RxJava2的房间 – (Flowable,Maybe,Repository Pattern)

我在我的应用程序中使用Room作为数据库层,在网络调用中使用Retrofit – 在室内和改造中我都在使用RxJava2(这是我的第一个rxjava项目,所以我在这方面仍然很新手)。 注入数据库,api等我正在使用Dagger 2。 我想进行网络呼叫并将响应从网络添加到数据库。 当不需要再进行网络调用时 – 我想从数据库中获取数据。 我在我的房间存储库中使用Maybe / Flowable时遇到问题。 这是道: @Dao public interface CoinDao { @Query(“SELECT * FROM coin”) Flowable<List> getAllCoins(); @Insert void insert(List coins); @Update void update(Coin… coins); @Delete void delete(Coin… coins); } 这是我的存储库: public class CoinRepository implements Repository { private CoinMarketCapNetworkApi api; private final CoinDao coinDao; public CoinRepository(CoinMarketCapNetworkApi api, CoinDao […]

何时在ViewModel中部署RxJava2 Disposable?

我在我的应用程序中使用Android架构组件中的ViewModel 。 在ViewModel中,我正在使用RxJava2订阅,并在订阅后保留Disposable对象。 以前,当我在Activity此操作时,我习惯在onDestroy()处理Disposable – 以避免内存泄漏: @Override protected void onDestroy() { disposable.dispose(); super.onDestroy(); } 何时以及如何在ViewModel处理它? 我真的需要这样做吗?

Rxandroid SubscribeOn和ObserveOn之间的区别是什么

我只是在学习Rx-java和Rxandroid2,我只是混淆了SubscribeOn和ObserveOn之间的主要区别。

RxJava2:Observable的替代

我有一个API,只返回错误/成功代码,没有正文。 使用RxJava1,我会使用Observable作为此调用的返回值。 我可以为RxJava2使用什么? Wiki上对RxJava2( 链接 )的提示没有帮助,因为我无法更改API的工作方式。 建立: compile ‘com.squareup.retrofit2:retrofit:2.1.0’ compile ‘com.squareup.retrofit2:converter-gson:2.1.0’ compile ‘com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0’

我是否需要处置()使用LiveDataReactiveStreams创建的发布者

假设我有一个Flowable,它在应用程序的不同部分之间共享。 在我想要观察它的每个片段中,我将它转换为带有LiveDataReactiveStreams.fromPublisher的LiveDataReactiveStreams.fromPublisher以避免泄漏和崩溃。 我现在有一个包装我的Flowable的LiveData。 然后我将LiveData传递给我的ViewModel(在ViewModelFactory中)。 据我了解,我可以继续使用LiveData而不用担心泄漏。 现在,我不想直接观察LiveData,而是想把它转换回带有LiveDataReactiveStreams.toPublisher和LiveDataReactiveStreams.toPublisher ,并订阅LiveDataReactiveStreams.toPublisher 。 这是一个Flowable,它包装了一个包装Flowable的LiveData 我的问题是:我是否必须担心处理此Flowable的订阅? 我希望LiveData会充当“障碍”,阻止我的上下文泄漏回根Flowable,但我不太确定。 换一种说法: Flowable A存在于全局上下文中 在每个片段中, A被包装在LiveData B中 ,该数据被设置为片段ViewModel的属性 通常情况下,我会观察LiveData B ,而是将其包装在Flowable C中 我订阅Flowable C并忽略退回的一次性用品 当片段被破坏时,在C中访问的视图是否会泄漏到A ?

Rxjava 2与相机exception

我刚刚将我的代码从asynctask切换到rxjava2并且我在我的nexus上随机获取此exception: 在Galaxy s6 Edge中调用Camera.release()之后正在使用相机 以下是我的代码 – class级相机 : public class Cameras { private static final String TAG = Cameras.class.getSimpleName(); private static final String SP_CAMERA_ID = “camera_id”; private static final int NO_NEXT_TASK = 0; private static final int NEXT_TASK_RELEASE_COMPLETE = 1; private static final int NEXT_TASK_SWITCH_COMPLETE = 2; private static final int NEXT_TASK_START_PREVIEW = 3; private […]

RxJava2去抖function在RecyclerView – Android中无法正常工作

我正在尝试创建一个自定义ImageButton,当用户停止单击按钮1秒钟时,它将累积点击并触发事件。 我用debounce函数来完成这个。 自定义ImageButton: public class MBImageButton extends ImageButton { private AtomicInteger mCounter; private Disposable mDisposable; private Observable observable; private OnAccumulatedRequestsRead mOnAccumulatedRequestsRead; private OnEverClickListener mOnEverClickListener; private int emitEveryMilli = 1000; // every 1 second by default private boolean shouldDisposeOnDetachFromWindow = true; public MBImageButton(Context context) { super(context); init(); } public MBImageButton(Context context, AttributeSet attrs) { super(context, attrs); […]

RXJava2:链式改造请求的正确模式

我对RXJava一般来说相对较新(实际上只开始使用它与RXJava2),我能find的大多数文档往往是RXJava1; 我现在通常可以在两者之间进行转换,但整个Reactive的东西都很大,它是一个压倒性的API,有很好的文档(当你能find它时)。 我正在尝试简化我的代码,我想用婴儿步骤来做。 我想要解决的第一个问题是我在当前项目中做了很多常见的模式: 您有一个请求,如果成功,您将用于发出第二个请求。 如果其中一个失败,您需要能够识别哪个失败。 (主要用于显示自定义UI警报)。 这就是我现在通常这样做的方式: (为简单起见,省略了.subscribeOn/observeOn ) Single first = retrofitService.getSomething(); first .subscribeWith( new DisposableSingleObserver() { @Override public void onSuccess(final FirstResponse firstResponse) { // If FirstResponse is OK… Single second = retrofitService .getSecondResponse(firstResponse.id) //value from 1st .subscribeWith( new DisposableSingleObserver() { @Override public void onSuccess(final SecondResponse secondResponse) { // we’re done with both! […]

rxJava2在复杂流中组合Single,Maybe,Completable

我对新的RxJava Sources感到非常兴奋,例如: Single , Maybe , Completable ,这使得你的接口类更清晰,并防止在创建你的’Source’时出现很多错误(例如忘记调用onComplete() ) 但它需要大量的样板才能将它们组合成一个复杂的流。 例如,我们有常见的Android加载和缓存数据的情况。 假设我们有2个源api和cache ,我们希望将它组合起来: public interface Api { Single loadFromNetwork(); } public interface Cache { Maybe loadFromCache(); //maybe because cache might not have item. } 让我们试着把它结合起来: final Single result = cache.loadFromCache() .switchIfEmpty(api.loadFromNetwork()); 它不会编译,因为Maybe没有重载Maybe.switchIfEmpty(Single):Single 所以我们必须转换一切: final Single result = cache.loadFromCache() .switchIfEmpty(api.loadFromNetwork().toMaybe()) .toSingle(); 组合它的另一种可能方法还需要сonversion: final Single result = […]