Tag: rx java2

如果可能完成,则将Maybe从另一个源转换为单个

我想建立一个Repository类,返回一个Single 。 该类首先应该查找返回Maybe的Cache ,如果Maybe完成了我的Service ,返回Single interface Cache { fun getSomething(): Maybe } interface Service { fun getSomething(): Single } class Repository ( private val cache: Cache, private val service: Service ) { fun getSomething(): Single { return cache.getSomething() .????(feed.getSomething()) //onCompleteTransformToSingle() or similar } } 我已经通过JavaDoc进行了搜索,但是似乎并不存在这种情况下的变换器。 有处理这个好方法吗?

如何在unit testing中处理嘲讽的RxJava2可观察抛出exception

在过去的几个星期里,我一直在Kotlin使用MVP在Android上进行TDD。 事情进展顺利。 我使用Mockito来模拟类,但我似乎无法完成如何执行我想运行的测试之一。 以下是我的测试: 调用API,接收数据列表,然后显示列表。 loadAllPlacesTest() 调用API,接收空数据,然后显示列表。 loadEmptyPlacesTest() 调用API,在路上发生一些exception,然后显示错误信息。 loadExceptionPlacesTest() 我已经成功测试了#1和#2。 问题在于#3 ,我不确定如何在代码中进行测试。 RestApiInterface.kt interface RestApiInterface { @GET(RestApiManager.PLACES_URL) fun getPlacesPagedObservable( @Header(“header_access_token”) accessToken: String?, @Query(“page”) page: Int? ): Observable } RestApiManager.kt实现接口的管理器类如下所示: open class RestApiManager: RestApiInterface{ var api: RestApiInterface internal set internal var retrofit: Retrofit init { val logging = HttpLoggingInterceptor() // set your desired log level […]

如何获取RxJava 2自定义运算符上的RetroFit请求的URL和方法?

所以我正在尝试为Http请求集成Firebase性能,并像这里显示的那样手动添加它们(步骤9)。 我正在使用Retrofit 2和RxJava 2,所以我有做一个自定义运算符的想法,检查下面的代码: 改造2客户端 @GET(“branch-{environment}/v2/branches”) fun getBranch(@Path(“environment”) environment: String, @Query(“location”) location: String, @Query(“fulfilment_type”) fulfilmentType: String): Single<Response> RxJava呼叫改造客户端 private val client: BranchClient = clientFactory.create(urlProvider.apiUrl) override fun getBranch(postCode: String, fulfilmentType: FulfilmentType): Single { return client .getBranch(environment, postCode.toUpperCase(), fulfilmentType.toString()) .lift(RxHttpPerformanceSingleOperator(URL?, METHOD?)) .map { it.body() } .subscribeIO() //custom Kotlin extension .observeMain() //custom Kotlin extension … } RxJava 2自定义操作员通过电梯: […]

使用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) ); 第二个请求可能来自第一个请求的响应值。 是否有可能合并这两个请求的方式,我只写一次代码的方式?

这是反应堆单声道的错误吗?

使用Reactor时我注意到了一些奇怪的行为。 情况是这样的: 拨打其余的API端点,获取一个包装在Mono中的值 用另一个值调用另一个API端点,检索另一个包装在Mono中的值 压缩两个结果 看起来会发生什么是onSubscribe(FluxMap.MapSubscriber)被调用两次的第一个API调用,然后打开两个连接,并产生两个结果。 传递给第二个API调用的结果是非确定性的,取决于第二个API调用是在前两个调用中的第二个调用完成之前还是之后执行。 这是使用Kotlin和Springboot WebClient重现问题的代码示例。 API端点根据路径参数生成单个GUID或多个GUID。 我使用第一个调用的结果中的第一个数字作为第二个调用中的路径参数: val api = “https://www.uuidgenerator.net/api/guid” val client = WebClient.builder() .baseUrl(api) .build() @Test public fun reactorBug() { val firstResult = callApi().doOnSuccess { r -> println(“callApi returned: $r”) } val secondResult = callApi(firstResult).doOnSuccess { r -> println(“callApi(result) returned: $r”) } println(Mono.zip(firstResult, secondResult, { first, second -> “First […]

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()) […]

Recycler中的checkbox勾选为true时,查看项目被immedietaly选中为false

我使用RxJava2,Kotlin和Room作为例子。 以下是将我的项目填充到recyclerView的适配器: class ShoppingListDetailsAdapter(val list: ArrayList, val context: Context, val listener: ShoppingItemCheckboxListener, val isArchived: Boolean) : RecyclerView.Adapter() { override fun getItemCount(): Int { return list.count() } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { val itemView = LayoutInflater.from(parent?.getContext()) .inflate(R.layout.item_shopping_list_element, parent, false) return ViewHolder(itemView) } override fun onBindViewHolder(holder: ViewHolder?, position: Int) { val item = list.get(position) […]

链接多个RxJava,Room和Retrofit

我正在使用RxJava / Kotlin和Room和Retrofit。 我确信我没有写任何东西,因为我刚开始学习RxJava。 这种情况是我打电话来检查数据库中是否有最喜欢的记录,并将它们放入列表中,从API获取数据并将其插入到数据库中,使用之前的collections夹列表更新数据库,并获取所有记录更新,列表。 我得到了我的片段的结果,但每次我得到它,就好像我得到1不喜欢的项目,直到我没有collections的项目。 Repository fun getKafaniFromApi(): Observable<List> { return apiService.getKafani().toObservable().doOnNext { insertKafaniInDb(it) } } fun getKafaniFromDb(): Observable<List> { return kafanaDao.getKafani().toObservable() } fun insertKafaniInDb(kafani: List) { Observable.fromCallable { kafanaDao.insertAll(kafani) } .subscribeOn(Schedulers.io()) .subscribe { Timber.d(“Inserted ${kafani.size} kafani from API in DB…”) } } fun getFavoriteKafani(): Single<List> { return kafanaDao.getFavoriteKafani() } fun setKafanaFavorite(kafana: Kafana, isFavorite: […]

为什么我的RxJava设置阻止我的UI线程? 使用BluetoothAdapter.startLeScan回调

我正在努力寻找阻止我的UI线程的具体行动,我已经尝试了几个调度运算符,但我不知道如何使其工作。 我有一个用户界面的按钮,这onClicked是开始蓝牙扫描和更新textView字符串像一个日志(它显示了在这一刻发生的事情)。 所以这是我的MainActivity: lateinit var disposable: Disposable val textDataService = TextDataService() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_scan_test) buttonScanTestStart.setOnClickListener { if (isBluetoothEnabled()) { textViewLog.text = “” buttonScanTestStop.visibility = View.VISIBLE buttonExportScanTestRaportSummary.visibility = View.GONE buttonExportScanTestRaportFull.visibility = View.GONE buttonScanTestStart.visibility = View.GONE disposable= Scanner() .discoverSingleDevice(this, ” “, textViewLog) .doOnError { setText(“General error: ${it.message ?: it::class.java}”, textViewLog) setLogText(“General error: ${it.message […]

扩展函数不会创建新的Observable对象

我有kotlin和rxjava意想不到的行为。 我使用picasso创建了一个用于加载图像的扩展function fun Picasso.loadBitmap(url: String) : Observable = Observable.create { emitter -> Log.d(“picasso load bitmap”, “me ${this}”) try { val bitmap = load(url).centerCrop() .resize(100, 100) .transform(CircleTransformer()) .get() emitter.onNext(bitmap) emitter.onComplete() } catch (e: IOException) { emitter.onError(e) } } 我在这样的时间间隔(几乎在同一时间)多次调用这个, picasso.loadBitmap(place.image_url) .subscribeOn(Schedulers.io()) .retryWhen { error -> error.zipWith(Observable.range(1, 5), BiFunction { t1, t2 -> RetryWrapper(t2.toLong(), t1) }) .flatMap […]