Tag: rx android

订阅多个视图到一个视图onclick和可见性改变RxAndroid

我新使用RxJava,并且仍然熟悉很多概念。 试图在一个项目中使用它,我想要做的是订阅一个视图的点击事件来改变另一个视图的可见性。 这是我的审判工作。 RxView.clicks(info_overlay).map { _ -> View.GONE }.subscribe { AppCache().hasSeenInfoScreen = true info_overlay_child_take_a_helfie.visibility = it info_overlay_child_subscription.visibility = it info_overlay_child_description.visibility = it info_overlay_child_header.visibility = it } 不过,我也想订阅info_overlay可见性。 这样info_overlay的可见性info_overlay影响其他视图。 我如何实现这一点和点击观察在一起。

在哪里绘制反应式编程线

在我的项目中,我一直在使用RxJava大约一年。 随着时间的推移,我开始非常喜欢它 – 现在我想也许太多了… 我写的大多数方法现在都有某种forms的Rx,这太棒了! (直到不是)。 我现在注意到有些方法需要大量的工作来组合不同的可观察生产方法。 我感觉到虽然我明白我写的东西,但下一位程序员很难理解我的代码。 在底线之前,让我直接从我在Kotlin的代码给出一个例子(不要太深入): private fun getCachedEntities( getManyFunc: () -> Observable<Timestamped<List>>, getFromNetwork: () -> Observable<ListResult>, getFunc: (String) -> Observable<Timestamped>, insertFunc: (T) -> Unit, updateFunc: (T) -> Unit, deleteFunc: (String) -> Unit) = concat( getManyFunc().filter { isNew(it.timestampMillis) } .map { ListResult(it.value, “”) }, getFromNetwork().doOnNext { syncWithStorage(it.entities, getFunc, insertFunc, updateFunc, deleteFunc) }).first() […]

使用RxJava发送多个请求

在Android中使用RxJava和Retrofit是非常新的。 我已经成功编写了API调用并开发了接口。 现在,我想以可以发送两个请求的方式编写我的代码:第二个请求取决于第一个请求的值。 有人可以指导我,如果这是可能的? 如果是的话那怎么样? 任何代码片段真的会有所帮助。 例如:以下是两个请求: mCompositeDisposable.add(fcService.getStationList() .subscribeOn(Schedulers.io()) // “work” on io thread .observeOn(AndroidSchedulers.mainThread()) // “listen” on UIThread .subscribe(this::handleResults, this::handleError) ); mCompositeDisposable.add(fcService.getStationSensor(“12345678”) .subscribeOn(Schedulers.io()) // “work” on io thread .observeOn(AndroidSchedulers.mainThread()) // “listen” on UIThread .subscribe(this::handleResults, this::handleError) ); 第二个请求可能来自第一个请求的响应值。 是否有可能合并这两个请求的方式,我只写一次代码的方式?

RxAndroid / RxLifeCycle – 处理处理onError而不是onComplete

我正在尝试将RxLifeCycle实现到与RxJava联网中。 我一直在使用Consumer一个子Consumer ,但是对于RxLifeCycle ,你需要处理onError 。 所以我已经转移到Observer 。 这个问题是,当调用被处置时,它调用onComplete而不是onError ,我更喜欢。 buildle.gradle: // RxJava compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ compile ‘io.reactivex.rxjava2:rxjava:2.0.3’ compile ‘com.trello.rxlifecycle2:rxlifecycle-kotlin:2.2.1’ compile ‘com.trello.rxlifecycle2:rxlifecycle-android-lifecycle-kotlin:2.2.1’ 我以前的NetworkConsumer是这样构建的,我会处理accept所有结果。 NetworkConsumer: abstract class NetworkConsumer : Consumer<NetworkResponse> { @Throws(Exception::class) override fun accept(response: NetworkResponse) { … } // to override open fun onSuccess(response: T) {} open fun onComplete() {} } 我的网络电话都使用Single结构化。 fun getFavorites(): Single<NetworkResponse<Array>> 我正在使用它。 service.getFavorites(…) […]

使用flatMap和filter过滤observables是否正确?

使用一个人为的例子来说明我的问题,我有一个复合对象types的Observable: Observable public class CategoryPayload { public List categories; // other meta data and getters } public class Category { public Integer id; // other meta data and getters } 我需要根据id过滤掉某些类别,所以我最终做了如下的事情: Observable categoryObservable = service.getCategoryPayload(); // use flatMap to transform the Observable into multiple mSubscription.add( categoryObservable.flatMap(new Func1<CategoryPayload, Observable>(){ public Observable call(CategoryPayload categoryPayload){ return Observable.from(categoryPayload.categories); } […]

404 – 使用Retrofit2和RXJava2调用API时

我有一个与提到的libs下面调用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’ compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ compile ‘io.reactivex.rxjava2:rxjava:2.0.1’ 提供翻新实例的代码 @Provides @Singleton RxJava2CallAdapterFactory provideRxJavaCallAdapter(){ return RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()); } @Provides @Singleton Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient, RxJava2CallAdapterFactory rxJavaCallAdapterFactory){ return new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(rxJavaCallAdapterFactory) .client(okHttpClient) .build(); } Api界面 @GET(“form/{slugOrUUID}”) Observable getForumRx(@Path(“slugOrUUID”) String slugOrUUID); 最后放到我打电话给REST的地方 ForumService forumService = retrofit.create(ForumService.class); Observable photography = forumService.getForumRx(“sample”); photography.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) […]

Kotlin库’rxkotlin-0.21.0.jar’具有不受支持的格式。 请更新库或插件

标题中的错误出现在Android Studio中,作为警告栏,高于我的所有代码: Android Studio版本: 1.1.0 Android Studio的Kotlin插件版本: 0.11.91.AndroidStudio.4 build.gradle文件似乎正在使用所有最新版本的Kotlin库: apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ android { compileSdkVersion 22 buildToolsVersion “22.0.1” defaultConfig { applicationId “ca.amandeep.simpletransit” minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName “1.0” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } sourceSets { main.java.srcDirs += ‘src/main/kotlin’ } } dependencies { compile […]

通过订阅/取消订阅从侦听器发出项目的正确方法

在MVP架构之后,视图是一个Android活动,每个人都有自己的主持人。 作为数据存储库,我有一个图层,每次在后端发生变化时都会通知我新的数据。 存储库可以由不同的演示者使用,演示者必须在视图被销毁时销毁。 如何实现一个响应式流(每个存储库一个),演示者可以订阅和取消订阅以获取数据更新? 其他要求是流应该能够结合并应用它们的反应操作符。 我通过Firebase Firestore后端尝试了以下内容,但发现内存泄漏(活动和演示者不会被破坏)。 注意:当后端发生变化时,addSnapshotListener()回调会通知新数据。 正如您所看到的,observable是公开的(默认情况下是Kotlin),供演示者使用,用于订阅和取消订阅。 class DocumentRepository( path: List, private val model: Class) { private var documentReference: DocumentReference val observable: Observable private var emitter: ObservableEmitter? = null private lateinit var item: T init { documentReference = FirebaseFirestore.getInstance().collection(path[0]).document(path[1]) for (i in 2..path.lastIndex step 2) documentReference = documentReference.collection(path[i]).document(path[i + 1]) observable = Observable.create(this::listenChanges) […]

RxJava推迟了可观察到的火灾

我有一个使用RxJava observables设置的事件序列。 基本上,我使用observable.delay(time, timeUnit, scheduler)函数合并了由Observable.just(Events.*)创建的不同延迟创建的不同事件。 然后将它们发布到PublishSubject (下面的代码中的events )并订阅该PublishSubject以观察下面的代码中的序列( observeEvents()函数)。 它曾经工作得很好,但最近我在我的设备上看到了一个非常奇怪的行为(OnePlus One与android 5.0.2)(并没有在模拟器上看到它)。 基本上事件会混淆起来,延迟较高的事件可能会在延迟较小的事件之前发生,延迟较小的事件可能会发生在队列的末尾,有时候所有的事件都会以正确的顺序出现。 前三个赛事经常混合在一起。 有时候根本没有观察到一些事件。 这里会发生什么? 代码在Kotlin: var computationScheduler = Schedulers.computation() private val events: PublishSubject = PublishSubject.create() private val userActionSubject: PublishSubject = PublishSubject.create() Observable.merge( event0(), event1(), event2(), userActionOrEvent3(), userActionOrEvent4()) .subscribe({ // Weird timings are observed here already events.onNext(it) }, { e -> events.onError(e) })) private […]

rxjava2:使用连接的Completable并在IO线程中观察它们

起初,我知道网络操作不应该从主线程调用。 这就是为什么我在Schedulers.io()上观察Completable的原因! 我试图连接两个完整的。 这两个完整的使用网络,这就是为什么我订阅Schedulers.io()。 如果我使用concatWith(或者和然后)代码失败与NetworkOnMainThreadException。 这里是kotlin代码: val singleSubject = SingleSubject.create(); completalbe1.concatWith(completable2) .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) .subscribe({ singleSubject.onSuccess(“ok”) }, { error -> Log.e(tag, error.message, error)//here i got exception singleSubject.onError(error) }) return singleSubject 如果我重写代码没有完整的链接 – 一切都好。 这是工作代码: val singleSubject = SingleSubject.create(); completable1 .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) .subscribe({ completable2 .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) .subscribe({ singleSubject.onSuccess(“ok”) }, { error -> Log.e(tag, error.message, error) singleSubject.onError(error) }) […]