Adnroid基于Kotlin版 Flow+Okhttp3+retrofit2 网络框架库

用法

    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、协程

  • 1、RxJava3版本需继承HttpActivity、HttpFragment
  • 2、Retrofit请求方法声明,flow版本需要添加suspend,返回类型为具体实体类, RxJava3版本不需要添加suspend,返回类型为Observable<实体类>
  • 3、httpCall参数返回,flow版本需要添加suspend,返回类型为具体实体类, RxJava3版本不需要添加suspend,返回类型为Observable<实体类>
  • 4、activity参数,flow版本为FragmentActivity, RxJava3版本为HttpActivity
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容