当前位置: 首页 > 工具软件 > FUEL > 使用案例 >

安卓笔记-网络框架Fuel初探

张华池
2023-12-01

之前的项目里网络框架一直用的是retrofit+rxjava这一套,突然看到了一个纯用kotlin写的网络框架,查了一下网上好像对这个的教程并不多,所以就自己弄个demo玩一玩了。如果有兴趣的可以直接点击此处去github上看原库

导入依赖

注:最新版本号请前往github上查询

    //core
    implementation 'com.github.kittinunf.fuel:fuel:2.2.3'
    //android support
    implementation 'com.github.kittinunf.fuel:fuel-android:2.2.3'
    implementation 'com.github.kittinunf.fuel:fuel-gson:2.2.3'
    implementation 'com.github.kittinunf.fuel:fuel-rxjava:2.2.3'
    implementation 'com.google.code.gson:gson:2.8.6'

第一个依赖跟第二个依赖是安卓开发必须要添加的,后面是json数据序列化用的我用的是gson,他还支持Jackson/moshi什么的,具体的可以去github上看文档,而且他也支持rxjava,livedata还有协程,开发者可以通过自己的需要来导入响应的库,另外他序列化支持的库还是需要导入相应序列化工具的依赖的,比如我使用的gson,在写入他对gson 支持的依赖之后还需要把gson的依赖写上去。

开始使用

简单的网络请求可以分两种方式,方式一:

       "url"
            .httpGet(parameters = listOf(
                "key" to "value"
            ))
            .responseString { result: Result<String, FuelError> ->
                ....
            }

方式二:

        Fuel
            .get(path = "url", parameters = listOf( "key" to "value" ))
            .responseString { result: Result<String, FuelError> ->
                ....
            }

如果希望回调的时候使用序列化工具进行解析的话可以这么写(以gson为例子):

       "url"
            .httpGet()
            .responseObject(gsonDeserializer()) { result: Result<T, FuelError> -> 
                
            }

这个gsonDeserializer()方法是他gson支持依赖里自带的,当然也可以自定义这个序列化,如果有需要的话可以仿照以下代码更换序列化工具:

class TestDeserializer<T : Any> : ResponseDeserializable<T> {
        override fun deserialize(content: String): T? {
            return Gson().fromJson<T>(content, object : TypeToken<T>() {}.type)
        }
    }

然后他也可以设置一些全局的属性:

        FuelManager.instance.basePath = BASEURL
        FuelManager.instance.baseHeaders = mapOf(
            "key" to "value"
        )
        FuelManager.instance.timeoutInMillisecond = 30000
        FuelManager.instance.timeoutReadInMillisecond = 30000
        FuelManager.instance.addResponseInterceptor { LogResponseInterceptor(it) }
        FuelManager.instance.addRequestInterceptor { LogRequestInterceptor(it) }

这个库自带网络日志打印,所以看着就很香
这个库基本的网络请求都支持,还支持文件都下载和上传,而且可以设置回调显示进度,调用如下:

        "url"
            .httpDownload()
            .fileDestination { response, request ->
                File("","")
            }
            .progress { readBytes, totalBytes ->

            }
            .responseString { result: Result<String, FuelError> ->

            }
        "url"
            .httpUpload()
            .add { FileDataPart(File.createTempFile("","")) }
            .progress { readBytes, totalBytes ->  }
            .responseString { result: Result<String, FuelError> ->  }

可以说日常使用你能想到都他基本上都提供了,另外就是这个库不支持websocket。

 类似资料: