版权声明
本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/15608249.html
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
前言
此篇博客讲解协程与Retrofit 的组合开发
使用自定义GsonConverterFactory可以增加全局判断code
转载请注明来源:https://www.cnblogs.com/guanxinjing/p/15608249.html
依赖
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0'//LifecycleScope implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
代码部分
BaseResult
data class BaseResult<T>(var code: Int, var msg: String?, var data: T?)
接口
interface HttpList { /** * fota升级 * @param requestBody deviceSn : 设备sn号 * platform:设备平台 * series:设备系统 * @return */ @POST("api/v1/dev/getFotaInfo") suspend fun postFotaInfo(@Body requestBody: RequestBody): Response<BaseResult<FotaInfoBean>> /** * app升级 * @param requestBody deviceSn : 设备sn号 * platform:设备平台 * series:设备系统 * @return */ @POST("api/v1/dev/getApkInfo") suspend fun postAppUpdate(@Body requestBody: RequestBody): Response<BaseResult<AppUpdateInfoBean>> /** * 查询天气 * @param requestBody adm : 城市 例如 深圳 * location:地区 例如 宝安区 * @return */ @POST("api/v1/dev/getWeather") suspend fun getWeather(@Body requestBody: RequestBody): Response<BaseResult<String>> }
Repository
/** * app升级 */ class SystemUpdateRepository { suspend fun post(): BaseResult<FotaInfoBean>? { try { val json = JSONObject().apply { put("deviceSn", "LJ4KC1A0001A") } Net.getApi().postFotaInfo(HttpRequestBody.createJson(json)).apply { return if (isSuccessful){ body() } else{ BaseResult(code(), message(), null) } } } catch (e: Exception){ //这里的异常捕获很重要,因为是同步请求。网络请求的IO异常是直接抛出来的。因为IO异常类别多建议是直接捕获Exception异常 return BaseResult(NetCode.NETWORK_ERROR,"网络异常,查询升级信息失败",null) } } }
ViewModel
class LauncherViewModel : ViewModel() { private val _appUpdateResult = SingleLiveEvent<BaseResult<AppUpdateInfoBean>>() val appUpdateResult: LiveData<BaseResult<AppUpdateInfoBean>> get() = _appUpdateResult /** * 桌面app升级查询 */ fun postAppUpdate() { viewModelScope.launch { _appUpdateResult.postValue(AppUpdateRepository().post()) } } }
Activity
class MainActivity : AppCompatActivity() { private lateinit var mViewModel :MainViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mViewModel = ViewModelProvider(this).get(MainViewModel::class.java) initListener() } private fun initListener(){ btn1.setOnClickListener { mViewModel.getUserData() }
mViewModel.appUpdateResult.observe(this, Observer {
if (it.code == NetCode.REQUEST_SUCCESS) {
}
})
}
End
本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/15608249.html
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。