StartAndroid Ru RxJava
@rxjavachat 252 участника
Загрузить еще
17 января
для такого метода:
public Observable observe(String key, T defaultValue) {
return Observable.create(subscriber -> {
if (subscriber.isUnsubscribed()) return;
subscriber.onNext(get(key, defaultValue));
Subscription subjectSubscription = mSubject
.filter(k -> TextUtils.equals(k, key))
.map(k -> get(key, defaultValue))
.subscribe(subscriber::onNext);
subscriber.add(Subscriptions.create(subjectSubscription::unsubscribe));
});
}
Привет народ.
Кто-нибудь знает как можно менять количество попыток при возникновении ошибки в зависимости от условия(например при частых ошибках увеличить,а когда время между ошибками большое уменьшать количество)?
Есть retryWhen,но в основном пишут делать одно количество повторов с задержкой.
вопрос звучит так, будто ты спрашиваешь сколько нужно подставить ведер, а не как починить крышу
Каждый понимает как может.
Шпаргалка по doOn* методам
proandroiddev.com/...
слушайте,как можно провести Unit тестирование Rx функции запроса в сеть или что-то асинхронное?есть примеры?
Народ есть вопрос. С помощью retrofita + rx получаю json с сайта, json содержит поле готов/не_готов. как мне сделать чтобы он стучался например на сервер с периодичность в 1сек, а когда будет статус готов останавливался?
я пошуршал по интернету нашёл такой метод takeUntil но что-то не могу разобраться как его использовать
TestSubscriber не подходит?
не пробовал.Что это?
ну поищи, как тестировать реактивную джаву. TestSubscriber ts = new TestSubscriber();
SomeReturnType - это то, что возвращает тестируемый обсервабл
someObservable.subscribe(ts);
а потом
ts.assertCompleted();
ts.assertNoErrors();
ts.assertValue(someReturnTypeValue);
Спасибо
В моей статье с примерами есть периодический повтор операции, в самом конце
startandroid.ru/...

Я дополнил его под ваш случай, чтобы учитывать получаемые данные
я правда уже сделал, но все равно я думаю код пригодиться. Я сделал всё таки через takeUntil, если интересно завтра могу скинуть код
Да, скиньте, интересно посмотреть
18 января
Спасибо,помогло.
Как результат gist.github.com/...
joxi.ru/...
круто, ещё все if можешь сделать отдельными private методами, а потом их все тоже в один метод, чтобы flatMap был одной строчкой, а потом после assertCompleted и assertNoErrors проверить через assertValue что твой метод вернул ту одну миллисекуду, что у тебя в return Observable
Тут смысл был именно в изменении количества попыток.А результат неважен.в боевой версии вообще приходит либо true либо ошибка подключения.
я не говорю менять логику кода, я говорю про чистоту и красоту)
есть метод с BehaviourSubject
public Observable getPartOfDay() {
return partOfDaySubject.distinctUntilChanged();
}

на него подписываюсь так:
Observable.interval(10, TimeUnit.SECONDS)
.....вычисления
.subscribe(partOfDaySubject);

в другом методе пытаюсь использовать всё это дело так:
getPartOfDay().concatMap(s -> Observable.create((ObservableOnSubscribe) emitter -> {
emitter.onNext(50);
emitter.onComplete();
})

так вот, в подписку приходит onNext(50), а onComplete нет :(
Всем привет. Почему-то не отрабатывает.

Observable.fromCallable(() -> mPolygon.getPoints())
.subscribeOn(Schedulers.computation())

.flatMap(latLngs -> {
CircleOptions circleOptions = new CircleOptions();
LatLng center = findCenterOfPolygon(latLngs);
LatLng radiusPoint = findMinRadius(latLngs, center);
if (radiusPoint == null) {
return null;
}
double radius = SphericalUtil.computeDistanceBetween(center, radiusPoint);
circleOptions.center(center)
.radius(radius)
.strokeWidth(2);
return Observable.just(circleOptions);
}).observeOn(AndroidSchedulers.mainThread())
.subscribe(circleOptions ->

mGoogleMap.addCircle(circleOptions),
throwable -> throwable.printStackTrace());
вообще реакции ноль
I C:
Ребята такой вопрос в intentservice есть два метода вначале запускается один, когда он заканчивается запускается другой. Оба отправляют запросы в сеть используя ретрофит и rxjava. Всё идёт в потоке intentservice. Первый метод всегда отрабатывается, а второй никогда не стартует так как intentservice завершается. RxJava не дружит с intentservice? Получается что в intentservice лучше работать стандартными средствами java?
мне кажется, что запросы в сеть идут не в потоке сервиса, потому сервис и завершается. Но лучше смотреть по коду, как оно написано
В потоке сервиса точно, так как я не создаю доп потоков при помощи rx
запрос синхронный или асинхронный?
**запросы
Intentservice сразу исполняется в другом потоке и именно этот поток я юзаю но похоже он не видит подписку rx
можно увидеть код?
Код большой, но смысл в том что можно просто пустые методы гонять ничего не меняется. Похоже что intentservice и rxjava не дружат и нужно юзать обычный сервис или интент без rx
Так Вам нужна помощь или нужно решить таску за Вас?
Хотел послушать опыт тех, кто делал такую связку и убедиться, что такая проблема есть. Таску если что другими методами решу, но хотелось разобраться в вопросе
Мое предположение остается прежним. Зная, как интент сервис любит сворачиватся, когда у него нету задач в его потоке, и это не только с Rx, советовал бы смотреть в этом направлении. Если запрос Вы запускаете асинхронно, не зависимо от того, указали Вы поток в Rx или нет, ретрофит выполнит запрос в другом потоке. Если синхронно, нужно смотреть код, что бы видеть проблему. А так это игра в угадайку
А почему ретрофит выполнит запрос в другом потоке?
Почитайте про синхронные и асинхронные запросы :)
Так ретрофит будет выполнять запросы в потоке intentservice
Вы в этом уверены?
А какие ещё варианты если больше нигде не задаю новые потоки?
Попробуйте запустить асинхронный запрос без Rx, уверен, Вас ждет идентичный исход
Без rx всё работало без проблем. Я сейчас залью код только уберу лишнее
pastebin.com/iZKFdlgs
Метод getInfoAboutUser запускается но не выполняется
как создается Observable в репозитории?
Да observal в репозитории срздаётся и там нету доп потоков. Проблема вроде в методе interval он исполняется в своём собственном потоке
725788745
725823896