Android 使用Rxjava进行改进

Android 使用Rxjava进行改进,android,retrofit,rx-java,Android,Retrofit,Rx Java,我正在使用Rxjava进行改装。我知道如何使用它,但我仍然不清楚“Rxjava在改型中到底做了什么” 我们对RESTAPI调用使用任何转换器(如Gson)和Okhttp库进行改造,一旦得到响应,它将是可观察类型(如果使用Rxjava,否则它将是调用类型)。现在的问题是,如果我们已经得到了响应,那么Rxjava对该响应到底做了什么 据我所知,通过调查代码,Rxjava首先获取可观察的响应,并使用操作符对已获得的响应执行一些操作,然后它只将最终响应发送到观察者,从中可以将数据膨胀到视图中 首先

我正在使用Rxjava进行改装。我知道如何使用它,但我仍然不清楚“Rxjava在改型中到底做了什么”


我们对RESTAPI调用使用任何转换器(如Gson)和Okhttp库进行改造,一旦得到响应,它将是可观察类型(如果使用Rxjava,否则它将是调用类型)。现在的问题是,如果我们已经得到了响应,那么Rxjava对该响应到底做了什么


据我所知,通过调查代码,Rxjava首先获取可观察的响应,并使用操作符对已获得的响应执行一些操作,然后它只将最终响应发送到观察者,从中可以将数据膨胀到视图中


  • 首先,如果我的理解有任何错误,请告诉我 Rxjava
  • 已经获取的数据上执行操作有什么必要呢因为我们已经使用改型的API查询过滤了数据
  • 为什么我们在Rxjava中使用客户接口对象?因此,我们将其用于观察者onNext()的位置
  • Rxjava是否也有助于检索目的,还是只对已获取的数据进行操作

  • RXJava正在帮助您处理线程并将其转换为现有的反应式代码

    它使用Flowable/Observable/Single来获取数据(例如,如果流中有许多数据),它允许您使用Flowable来获取背压

    它还允许您使用基本的反应性功能,比如将请求放在不同的线程中,然后再进行观察

    这也意味着您可以将结果/请求作为反应流和映射/转换/。。。以及使用RxJava可能实现的任何功能

    您不必担心它是对现有数据的包装,因为数据是在拦截器中获取的,并转换为与RxJava一起使用

    您不会遇到任何性能问题,也不会有任何问题,因为它经过了社区的良好测试

    1) 首先,如果我对Rxjava的理解有任何错误,请告诉我

    RxJava代表反应式开发。它使用一种基于函数式编程的通用“编码风格”

    2) 当我们已经使用改型的API查询对数据进行过滤时,对已经获取的数据执行操作需要什么

    您可能希望对一个响应执行多个操作。这意味着您可以将其转换为不同的“行为”,或者只是再次合并/concat/zip/filter。在某些情况下,您无法控制api,需要稍后对其进行处理,这意味着reactive可以帮助您完成此任务

    *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> }
    
     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();  }
    
    var service=reformation.Builder()
    .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.newThread()))
    .addCallAdapterFactory(ObserveOnMainCallAdapterFactory(AndroidSchedulers.mainThread()))
    .addConverterFactory(GsonConverterFactory.create(GsonUtil.gson()))
    .客户(okHttpClient)
    .baseUrl(主机!!)
    .build()
    .create(YourService::class.java)
    service.getLotsOfData()
    .flatMapIterable{it}
    .flatMap{it.id=id+“whatEverModified”}
    .subscribeOn(Schedulers.io)
    .observeOn(AndroidSchedulers.mainThread())
    接口YourService{@GET(“lots/of/data”)fun getLotsOfData():Flowable}
    
    示例(Java):

        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> }
    
     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();  }
    
    YourService=reformation.Builder()
    .addConverterFactory(GsonConverterFactory.create(GsonUtil.gson()))
    .客户(okHttpClient)
    .baseUrl(主机)
    .build()
    .create(YourService.class);
    service.getLotsOfData()
    .flatMapIterable(数据->数据)
    .flatMap(数据->{data=data+“whatEverModified”;返回数据;})
    .subscribeOn(Schedulers.io)
    .observeOn(AndroidSchedulers.mainThread());
    接口YourService{@GET(“lots/of/data”)可流动的getLotsOfData();}
    

    这段代码获取您的数据列表,可以遍历每个项,将“whatEverModified”附加到模型中的每个id,并在IO线程中完成所有工作。修改并获取所有数据后,它将在主线程中返回数据。Subscribe=processdata,Observe=consumered data。

    RXJava正在帮助您处理线程并转换为现有的反应式代码

    它使用Flowable/Observable/Single来获取数据(例如,如果流中有许多数据),它允许您使用Flowable来获取背压

    它还允许您使用基本的反应性功能,比如将请求放在不同的线程中,然后再进行观察

    这也意味着您可以将结果/请求作为反应流和映射/转换/。。。以及使用RxJava可能实现的任何功能

    您不必担心它是对现有数据的包装,因为数据是在拦截器中获取的,并转换为与RxJava一起使用

    您不会遇到任何性能问题,也不会有任何问题,因为它经过了社区的良好测试

    1) 首先,如果我对Rxjava的理解有任何错误,请告诉我

    RxJava代表反应式开发。它使用一种基于f的通用“编码样式”