Adnroid基于Kotlin版 Flow+Okhttp3+re

2023-06-14  本文已影响0人  buhuiming

用法

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

    dependencies {
        implementation 'com.github.buhuiming:NetCore-Flow:1.1.2-alpha'
    }

1、Application配置默认的全局配置项(可选)

    HttpConfig.create()
        .setLoadingDialog(MyLoadingDialog())
        .setDialogAttribute(
            isShowDialog = true,
            cancelable = false,
            dialogDismissInterruptRequest = false
        )
        .isDefaultToast(true)
        .isLogOutPut(true)
        .setHttpTimeOut(30, 30)
        .setDelaysProcessLimitTimeMillis(0) //请求成功/失败之后,再过0秒后去处理结果
        .setJsonCovertKey()//设置json解析的Key
        .setOkHttpClient(null)
        .build()

2、发起请求(参考demo MainActivity)

    RequestManager.get()
        .buildRequest<DoGetEntity>()
        .setHttpOptions(httpOptions.getDefaultHttpOptions(this))//默认使用Application的配置
        .setBaseUrl("http://news-at.zhihu.com")
        .execute(
            HttpApi::class.java,
            {
                it.getData("Bearer aedfc1246d0b4c3f046be2d50b34d6ff", "1")
            },
            {
                //可以继承CallBackImp,重写方法,比如在onFail中处理401,404等
                success { response ->
                    Log.i("MainActivity--> ", response.date!!)
                    Toast.makeText(this@MainActivity, response.date, Toast.LENGTH_SHORT).show()
                }
                fail { e ->
                    Toast.makeText(this@MainActivity, e?.message, Toast.LENGTH_SHORT).show()
                }
            )

    或者
    lifecycleScope.launch {
        val builder = httpOptions.getDefaultHttpOptions(this@MainActivity)
        flow<DoGetEntity> {
            val api = RetrofitHelper(builder)
                .createRequest(HttpApi::class.java, "http://news-at.zhihu.com")
            val response = api.getData("Bearer aedfc1246d0b4c3f046be2d50b34d6ff", "1")
            emit(response)
        }.onStart {

        }.onCompletion {
            builder.dialog?.dismissLoading(this@MainActivity)
        }.catch {
            Toast.makeText(this@MainActivity, it.message, Toast.LENGTH_SHORT).show()
        }.collect { response ->
            Log.i(javaClass.name, response.date?: "")
            Toast.makeText(this@MainActivity, response.date, Toast.LENGTH_SHORT).show()
        }
    }

RxJava3版本flow版本

两者区别:基于RxJava线程管理和基于flow、协程

上一篇 下一篇

猜你喜欢

热点阅读