我用的是Rxjava和Retrofit。我知道如何使用它,但我仍然不清楚“Rxjava对Retrofit到底做了什么”。
我们对REST调用使用任何转换器(如Gson)和Okhttp库进行改造,一旦得到响应,它就具有可观察的类型(如果使用Rxjava,否则它将是调用类型)。现在的问题是,如果我们已经得到响应,那么Rxjava究竟是如何处理这个响应的呢?
到目前为止,通过查看代码,Rxjava首先采用了可观测响应,然后使用操作符对进行了一些操作,已经得到了响应,然后它只将最后的响应发送给观察者,从那里可以将数据膨胀成视图。
发布于 2017-09-11 12:28:09
RXJava正在帮助您进行线程处理,并将其转换为现有的反应性代码。
它使用可流动/可观测/单机来获取数据(例如,如果您在流中有很多数据),它允许您使用可流动的背压。
它还允许您使用基本的反应性内容,比如将请求放在不同的线程中,然后再进行观察。
这也意味着您可以将结果/请求作为反应流并映射/转换/.和任何可能的与RxJava。
您不必担心它是现有数据的包装器,因为数据是在拦截器中获取并转换为与RxJava一起使用的。
您不会遇到任何性能问题,也不会有任何问题,因为社区对它进行了很好的测试。
1)首先,如果我对Rxjava的理解是错误的,请告诉我。
RxJava代表反应性开发.它使用了一种常见的基于函数编程的“编码风格”。
2)对已经获得的数据进行操作的必要性是什么,因为我们已经使用API查询对数据进行了改进
您可能希望只对一个响应进行多个操作。这意味着您可以将其转换为不同的“行为”,或者只需再次合并/连接/压缩/筛选。在某些情况下,您无法控制api并需要稍后处理它,这意味着反应性可以帮助您完成此任务。
*3)为什么在Rxjava中使用客户接口对象?因此,我们使用它来代替观察者或onNext()。*
因为您请求数据,所以需要使用它。这就像有了一个列表,并且您想要修改列表中的条目,它允许您在消费(输出)之前这样做。如果发生错误,也会有使用者。
4) Rxjava是否也有助于检索目的,还是只对已经获得的数据进行操作?
因为它是一个拦截器,所以它将“现有”数据转换为一个反应流。它对已经得到的数据进行操作。至少在这种情况下。
示例(Kotlin):
var service = Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.newThread()))
.addCallAdapterFactory(ObserveOnMainCallAdapterFactory(AndroidSchedulers.mainThread()))
.addConverterFactory(GsonConverterFactory.create(GsonUtil.gson()))
.client(okHttpClient)
.baseUrl(host!!)
.build()
.create(YourService::class.java)
service.getLotsOfData()
.flatMapIterable{ it }
.flatMap{ it.id = id+"whatEverModified" }
.subscribeOn(Schedulers.io)
.observeOn(AndroidSchedulers.mainThread())
interface YourService { @GET("lots/of/data") fun getLotsOfData(): Flowable<CustomModel> }示例(Java):
YourService service = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(GsonUtil.gson()))
.client(okHttpClient)
.baseUrl(host)
.build()
.create(YourService.class);
service.getLotsOfData()
.flatMapIterable(data -> data)
.flatMap( data -> { data = data +"whatEverModified"; return data; })
.subscribeOn(Schedulers.io)
.observeOn(AndroidSchedulers.mainThread());
interface YourService { @GET("lots/of/data") Flowable<CustomModel> getLotsOfData(); }此代码获取数据列表,可遍历每一项,将"whatEverModified“附加到模型中的每个id,并在item中完成所有工作。在修改和获取所有数据之后,它将返回主线程中的数据。订阅=处理数据,观察=消耗的数据。
发布于 2017-09-11 22:21:22
为了说明为什么您应该将RxJava与Retrofit一起使用,我将向您介绍a previous answer of mine。建立重组是一次性的成本(无论是在设计还是在运行时),但是简洁和可组合的好处永远都会得到回报。
请注意,我认为您在错误的抽象级别上查看了RxJava --不要从观察者-订阅者事件的角度来考虑;更多地考虑使用惰性/可重复操作的数据存储级别。
https://stackoverflow.com/questions/46155738
复制相似问题