Articles of rx java2

Нечетное поведение TestObserver при подписке на тему

Рассмотрим следующий фрагмент RxJava 2 в Котлине : // 1. Create subject val subject = PublishSubject.create<Int>() // 2. Get observable val observable = subject.subscribeOn(Schedulers.io()) // 3. Subscribe val observer = observable.test() // 4. Trigger next subject.onNext(42) // 5. Await observer.awaitCount(1) // 6. Assert value observer.assertValue(42) По моему мнению, observer должен иметь возможность получить 42 после […]

HttpException не пойман onError ()

Я делаю запрос к серверу с использованием Retrofit2 и RxJava2. Когда ответ 200 или 201, все работает нормально. Когда ответ HttpException составляет 409 или 503, и HttpException он не попадает в onError() Observable и приложение падает. Запрос, который я делаю, выглядит следующим образом: @POST("users/sign-up") fun register(@Body register: RegisterBody): Observable<User> Этот фрагмент кода, где я делаю […]

Room – запрос SELECT, получение или дефолт

В SQL Brite существует метод mapToOneOrDefault . Есть ли что-то подобное в Комнате? Скажите модели @Entity(tableName = "users") data class User(@PrimaryKey val name: String) и Дао @Dao interface UserDao { @Query("SELECT FROM users where name = :name") fun getUserByName(name: String): Flowable<User> } Не поток ничего не возвращает для getUserByName("John") если в getUserByName("John") данных нет John […]

Не удается вызвать оператор () на Observable в Kotlin Android

Я пытаюсь изучить RxJava2 для Android, используя kotlin, и я следую этому хорошему онлайн-учебнику. Сначала я добавил две строки файла gradle.build: compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.3' Я попытался реализовать шаблон Observable с помощью этого кода: import io.reactivex.Observable class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val observable = Observable.from(arrayOf(1, 2, 3, 4, […]

Функция расширения не создает новый объект Observable

У меня неожиданное поведение с котлин и rxjava. Я создаю функцию расширения для загрузки изображения с помощью пикассо fun Picasso.loadBitmap(url: String) : Observable<Bitmap> = Observable.create<Bitmap> { 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) } } Я называю […]

Преобразование наблюдаемого в текущее с противодавлением в RxJava2

Я наблюдаю за строками, создаваемыми NetworkResource , обертывая их в Observable.create . Вот код, отсутствующий try / catch и аннулирование для простоты: fun linesOf(resource: NetworkResource): Observable<String> = Observable.create { emitter -> while (!emitter.isDisposed) { val line = resource.readLine() Log.i(TAG, "Emitting: $line") emitter.onNext(line) } } Проблема заключается в том, что позже я хочу превратить ее в […]

Mockito never () не работает с andThen rxjava2

Я тестирую довольно простой код, написанный в Котлине: o1.updateUser(params) .andThen(o2.reload()) Когда updateUser не работает, я ожидаю, что перезагрузка не будет выполнена. Но при тестировании с Mockito 2 и jUnit 5 происходит вызов указанного макета. насмешливо делается так: given(o1.updateUser(user)).willReturn(Completable.error(IllegalArgumentException()) given(o2.reload()).willReturn(Completable.complete()) Теперь проблема в том, что код ведет себя так, как ожидалось, а это значит, что в […]

Как обрабатывать ошибки в rxjava2 в android

Привет Я использую RxJava2 с LiveData в моем приложении для Android. Я делаю http-вызов, используя ниже @Inject lateinit var retrofit: Retrofit override fun doServerLoginApiCall(email: String, password: String): LiveData<LoginResponse> { val liveData = MutableLiveData<LoginResponse>() retrofit.create(RestApi::class.java).login(email, password) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe { loginResponse -> liveData.setValue(loginResponse); } return liveData } Как я могу обрабатывать ошибку, как показано ниже в […]

Исключение: blockingConnect не следует вызывать в потоке пользовательского интерфейса, несмотря на то, что я добавил другой поток

У меня есть вызов следующим образом: val connectionResult = googleApiClient.blockingConnect() что является причиной этого исключения: java.lang.IllegalStateException: blockingConnect не должен вызываться в потоке пользовательского интерфейса at com.google.android.gms.common.internal.zzbp.zza(Unknown Source) at com.google.android.gms.common.api.internal.zzbd.blockingConnect(Unknown Source) at com.elstatgroup.elstat.NexoLocationManager.startLocationUpdatesGmsApi(NexoLocationManager.kt:510) at com.elstatgroup.elstat.NexoLocationManager.startLocationUpdates(NexoLocationManager.kt:498) at com.elstatgroup.elstat.NexoLocationManager.appendRSSIEvent(NexoLocationManager.kt:283) at com.elstatgroup.elstat.NexoLocationManager.appendRSSIEvent(NexoLocationManager.kt:273) at com.elstatgroup.elstat.NexoLocationTest.testAppendLocationEvents(NexoLocationTest.kt:111) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) […]

Неверное поведение Maybe <List <T >> в комнате?

У меня есть следующее определение метода запроса: @Query("SELECT * FROM box_jobs") fun getAll(): Maybe<List<BoxJob>> Я хочу вернуть результат этого запроса, если он не пуст, иначе результат вызова API REST в противном случае. Это мой код для этой логики: override fun loadTasks(): Maybe<List<Task>> { Log.d(TAG, "Searching tasks in database") return boxJobDao.getAll() .map { boxJobs -> boxJobMapper.entityListToTaskList(boxJobs) […]