Tag: RX java

当传递的泛型扩展某些东西时,RxJava中compose和ObservableTransformer的奇怪行为

当试图在RxJava2中进行组合时,我发现了一些我不能解释的东西。 假设我们有以下两个静态方法: object RxUtils { fun <T> handleResponse(): ObservableTransformer<T, T> { return ObservableTransformer { observable -> observable.flatMap { t -> ObservableFromCallable.fromCallable(object: Callable<T>{ override fun call(): T { return t } }) } } } fun <T: GenericResponse> handleResponse2(): ObservableTransformer<T, T> { return ObservableTransformer { observable -> observable.flatMap { t -> ObservableFromCallable.fromCallable(object: Callable<T>{ override fun call(): […]

RxJava操作符用于切换方法

即时通讯新的与Android项目上的Rxjava,在这里我的代码 class RadioListRepositoryImpl(private val apiServices: ApiServices, private val chlDao: ChannelDao) : RadioListRepository { private val results: MutableList<DataResponse> init { results = ArrayList<DataResponse>() } override fun getData(): Observable<DataResponse> { return dataFromMemory().switchIfEmpty(dataFromNetwork()) } override fun dataFromMemory(): Observable<DataResponse> { val cacheDateExp = DateTime().minusHours(6) if(chlDao.isCacheExpired(cacheDateExp).isNotEmpty()){ Logger.d("Get data from cache SQLITE") val chList: MutableList<DataResponse> = ArrayList() val cache = chlDao.loadAll() […]

当链接从Observable.create()创建的Observable时,RxJava用户onNext / onError / onComplete没有被调用

我试图实现一个基本的RxJava链接调用 从Facebook Graph API获取用户名和照片 使用该信息然后注册我的后端服务 所以我尝试使用下面的flatMap getProfileFromFacebook().flatMap { user -> userRepository.createUser(user) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { Log.d("test", "onNext") }, { Log.d("test", "onError") }, { Log.d("test", "onComplete") }) 奇怪的是,没有任何用户的记录打印出来。 所以我试图用Observable.just(User())替换getProfleFromFacebook()。 这一次工作,onNext打印出来。 所以我想这个问题是在getProfleFromFacebook()。 这是它的实现 fun getProfileFromFacebook(): Observable<User> { return Observable.create<User>({ emitter -> val request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken()) { _, _ -> emitter.onNext(User()) emitter.onCompleted() } val parameters = Bundle() […]

按字母排序对象

当我尝试为我的应用排序“路由”列表时遇到了一个问题,不管我尝试什么,我无法获得我正在寻找的排序。 我想要它排序1,2,3,4,5等,但当我排序,我得到1,11,12,2,20等。 我的路线模型是 public open class Route(docValue:Map<String,Any>) { val route_id = (docValue["route_id"] as Number).toInt() val short_name = docValue["route_short_name"] as String val color = readColorMoreSafely(docValue, "route_color", Color.BLUE) val long_name = docValue["route_long_name"] as String } 用来排序的代码是 if(cityId != null && view != null) { val routesList = view.findViewById(R.id.routesList) as ListView val cache = TransitCache.getInstance(applicationContext, cityId, true) val […]

反应改造呼叫

我有一个应用程序,有一个viewpager与4个片段。 我想用我的服务器中的数据填充所有的片段。 我加载活动中的数据,我想分发给所有的片段。 所以我有这个签名: @GET("trashCan") fun getTrashCans() : Observable<List<TrashCanDto>> 我调用方法并填充List。 ServiceGenerator.createService(ApiClient::class.java) .getTrashCans() .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Subscriber<List<TrashCan>>(){ override fun onCompleted() { showProgress(false) } override fun onError(e: Throwable) { showProgress(false) Toast.makeText(this@TrashCansInfoActivity, "Erro ao carregar informações", Toast.LENGTH_SHORT).show() e.printStackTrace() } override fun onNext(trashCanList: List<TrashCan>) { mTrashCanList = trashCanList } }) 然后我有一个方法从这个列表中获得Observable: override fun getObservable(): Observable<TrashCan> { return BehaviorSubject.from(mTrashCanList) […]

RxKotlin:试图添加自定义错误捕获

我试图写我自己的RxKotlin扩展函数,这将使Observable处理特定的错误类型( Throwable子类)与一个作为参数传递的处理程序,不会发出更多的项目。 大理石图将是: — a — b — c — error : T [ handleError<T>(handler) ] — a — b — c — finished | handler(error) 我写了以下内容: public inline fun <reified E : Throwable, R> Observable<R>.handleError( crossinline handler: (E) -> Unit ) = onErrorResumeNext f@{ return@f when (e) { is E -> { handler(e); Observable.empty() […]

如何将自定义pojo作为参数传递给rxjava2 Observable中的接口方法调用?

当前的代码 Observable.from(listMovie)//list of movie .flatMap(new Func1<Movie, Observable<FavMovieRes>>() { @Override public Observable<FavMovieRes> call(Movie movie) { return moviesAPI.makeMovieFav(userId), sessionId, new MakeMovieFav("movie", movie.getId(), movie.isFavList())); } }) .subscribe(new Subscriber<FavMovieRes>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(FavMovieRes favMovieRes) { } }); 在上面的代码中,我将Movie对象列表传递给Observable,并在结果从API获取结果时对列表中的每个电影实例执行一个操作我想要更改一些有关该电影实例的数据库如何获取OnNext()中的每个Movie实例以及on订阅方法的错误方法。 我想要的是 Observable.from(listMovie) .flatMap(new Func1<Movie, Observable<FavMovieRes>>() { @Override […]

什么样的对象是反应式Java订阅?

在Reactive Java中,我们被告知.subscribe()调用返回“一个订阅引用”。 但Subscription是一个接口 ,而不是一个类。 那么实现这个接口的是什么样的对象呢? 我们有这个控制权吗? 有类可以创建和返回几种不同类型的Subscription ,但一个人做了什么? 如果我写 Subscription mSub = Subscriptions.create(<some Action0>); mSub = someObservable.subscribe(); 我的刚刚创建的Subscription不会被任何.subscribe()调用返回的内容覆盖吗? 你如何使用你创建的Subscription ? (在一个有点相关的说明中, Subscriptions.unsubscribed()是什么意思,它返回一个订阅,取消订阅什么也不做,因为它已经取消订阅了,呃?)

使用RxJava加入来自Firebase实时数据库的扁平化数据

加入扁平的数据是文档中描述的常见用例。 但是文档显示了一个不是实时的简单例子,它不会对变化做出反应。 我正在寻找更强大的实施。 我认为RxJava是理想的。 考虑以下Firebase结构: { "messages": { "group_id_1": { "message_id_1": { "text": "Hello", "author": "uid_1" } } }, "users": { "uid_1": { "name": "David" } }, "rooms": { "room_id_1": { "name": "General", "members": { "uid_1": true } } } } 我在这里看到两个用例: 获取具有作者姓名的组中的消息列表 我想我会得到Observable<Message> ,当我订阅它时,依赖关系(这些消息的用户)也将在一些缓存中订阅。 当我显示消息时,我可以从缓存中获取作者的名字。 这也是实时的 – 如果作者名称改变,可观察者发出改变的消息。 当我取消订阅observable时,也会依赖取消订阅。 获取他们名字的房间成员名单 我想我会得到Observable<User> ,当我订阅它,它将首先订阅房间的成员,然后个人用户。 这是实时的 – […]

Android RxJava取消旧请求

我是Rxjava的新手,在下面描述的场景中探索可能性并需要帮助。 第1步:滑动视图 第2步:进行API调用以获取数据 以上步骤重复了多次Views。 问题: API_CALL_1获取View_1结果 用户滑动View_2 API_CALL_2获取View_2结果 View_1结果将返回并与View_2结果一起填充到View_2中 我需要在API_CALL_2请求时取消API_CALL_1请求。 谢谢。