观心静

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

版权声明

本文来自博客园,作者:观心静 ,转载请注明原文链接: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

posted on 2021-11-26 15:55  观心静  阅读(226)  评论(0编辑  收藏  举报