有什么办法让Retrofit2返回LiveData

时间:2019-01-16 03:11:56

标签: android-architecture-components android-livedata android-jetpack

有什么方法可以使Retrofit2返回livedata而不是Observable吗?

如果可能的话,我们如何实现这种方法?

如果不可能,是否建议改型返回Observable,然后将其转换为livedata?

2 个答案:

答案 0 :(得分:0)

您可以使用LiveDataReactiveStreams。

For example:

    fun someMethod(id : Int) : LiveData<List<SomeObject>>{
        return LiveDataReactiveStreams.fromPublisher(
            repository.getDataFromSource(id)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()))
    }

在这里,repository.getDataFromSource()返回一个Flowable。

答案 1 :(得分:0)

您必须添加 |ID | Dte_On | Dte_Off | Active | | 1 | 01-JAN-2000 | 31-JAN-2008 | Y | | 2 | 01-FEB-2008 | 1-DEC-2008 | N | | 1 | 2-DEC-2008 | 31-JAN-2010| Y | | 3 | 1-FEB-2010 | 1-DEC-2010 | N | | 1 | 2-DEC-2010 | 31-12-9999 | Y | 在翻新适配器中。

我已经使用Dagger-2实现了:-

addCallAdapterFactory(LiveDataCallAdapterFactory())

创建类似GithubService的接口类:-

@Module(includes = [ViewModelModule::class])
        class AppModule {
        @Singleton
        @Provides
        fun provideGithubService(): GithubService {
            return Retrofit.Builder()
                .baseUrl("YOUR URL")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(LiveDataCallAdapterFactory())
                .build()
                .create(GithubService::class.java)
        }
      }

注入GithubService类,然后您可以获得:-

interface GithubService {
    @GET("users/{login}")
    fun getUser(@Path("login") login: String): LiveData<ApiResponse<User>>
}

LiveDataCallAdapterFactory会像这样

githubService.getUser(login)

作为参考,您可以看到此链接https://github.com/googlesamples/android-architecture-components/tree/master/GithubBrowserSample