flowOf() 可以将指定的一串数据转换为 flow,接收可变参数。 fun flowOfFun() = runBlocking { flowOf(1, 2, 3, 4, 5) .filter { it > 2 } .map { it * 2 } .take(2) .collect { // 6 8 println(it) } listOf(1, 2, 3, 4, 5) .filter { it > 2 } .map { it * 2 } .ta...
通过下面的关系图,可以更好地理解Retrofit和Flow的结合: UserintidPKstringnamestringemailApiServiceUserRepositoryUserViewModelfetchesusesaccesses 同时,通过下面的类图,可以更清晰地看到各个类之间的关系: ApiService+getUsers() : ListUserRepository+getUsers() : Flow>UserViewModel+users : LiveData>UserActivity+onCre...
val retrofit = Retrofit.Builder() .baseUrl("https://api.example.com/") .client(OkHttpClient()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(FlowCallAdapterFactory()) .build() 接下来,定义你的 API 接口,使用 Flow 作为返回类型: kotlin import retrofit2.http.GET impo...
* 直接发起Flow请求,如果你使用框架内部的[dora.http.retrofit.RetrofitManager]的话,需要开启 * [dora.http.retrofit.RetrofitManager]的flow配置选项[dora.http.retrofit.RetrofitManager.Config.useFlow] *为true。 */ suspend fun <T> flowRequest(requestBlock: () -> Flow<T>, successBlock: ((T) -> Un...
Retrofit all wasteful faucets by installing aerators with flow restrictors. 通过安装限流器的装置修正所有造成浪费的水龙头。"They're really hot and they're a great tool for homeowners to retrofit homes, " Chavez said. 查韦斯表示,“这些计划很火爆,成为业主翻新房屋的重要手段。”Designed to retrofit...
callbackFlow 的底层用到了Channel,所以才可以使用trySend/close这样的 API。 trySend()其实就是send()的非挂起函数版本的 API。因为onSuccess/onFail中没有协程作用域,所以不能直接使用 Channel 的挂起函数send()。 awaitClose 上面代码中,如果去掉awaitClose,会异常: ...
callbackFlow 的底层用到了Channel,所以才可以使用trySend/close这样的 API。 trySend()其实就是send()的非挂起函数版本的 API。因为onSuccess/onFail中没有协程作用域,所以不能直接使用 Channel 的挂起函数send()。 awaitClose 上面代码中,如果去掉awaitClose,会异常: ...
在这里,callAdapter做的事情就是把retrofit2.Call对象适配转换为Flowable<T>对象。 同样,如果现有的扩展包不能满足需要,可以继承Retrofit的接口retrofit2.CallAdapter<R,T>,自己实现CallAdapter和CallAdapterFactory。 实现原理 Retrofit固然设计精妙,代码简洁,使用方便,但相应的,我们要理解Retrofit的实现原理也不太容易,这么...
支持Flow+Retrofit+OkHttp实现链式http请求 支持Rxjava+Retrofit+OkHttp实现链式http请求 全局配置网络加载错误页面,并支持重新加载数据 全局配置列表空页面 封装基类:BaseActivity、BaseVMActivity、BaseFragment、BaseVMFragment、RecycleAdapter、BaseViewModel 引入LifeCycle,将ViewModel和Activity的生命周期绑定在一起 ...
项目的网络请求封装提供了两种方式的实现,一种是协程+Retrofit+ViewModel+Repository,像官网那样加一层Repository去管理网络请求调用;另一种方式是通过 Flow 流配合 Retrofit 更优雅实现网络请求,对比官网的做法更加简洁。 (1) Retrofit+协程+Repository BaseViewModel ...