Fuel:Kotlin / Android最簡單的HTTP網絡庫

Fuel地址

  • 優點:簡單方便,擴展多
  • 缺點:中文文檔少,使用要在Android版本5及以上(sdk 19+)(不知道以后會不會有改進,現在是這樣)

用法

  • 添加依賴
//Fuel
    //Android使用
    implementation 'com.github.kittinunf.fuel:fuel-android:1.16.0'
    //Gson解析
    implementation 'com.github.kittinunf.fuel:fuel-gson:1.16.0'

GET網絡請求用法(有三種寫法,我就列出一條)

//get,返回String
Fuel.get("https://httpbin.org/get").responseString { request, response, result ->
    //返回參數
    result.fold({ d ->
        //返回成功,處理數據
    }, { err ->
        //請求失敗,執行錯誤處理
    })
}

有時候我們返回的時候希望直接轉化成實體類

  • 要轉化的實體類
package com.em.testfuel

data class User(val name: String, val age: Int) {
}
  • 請求
Fuel.get(url).responseObject<User> { request, response, result ->
            result.fold({
                Log.e("test",it.name)
            },{
                Log.e("test", it.message)
            })
        }

有時候我們需要這樣寫

data class User(val name: String, val age: Int) {
    class Deserializer : ResponseDeserializable<User> {
        override fun deserialize(content: String): User? {
            return Gson().fromJson(content, User::class.javaObjectType)
        }
    }
}
 Fuel.get(url).responseObject(User.Deserializer()) { request, response, result ->
            result.fold({
                Log.e("test",it.name)
            },{
                Log.e("test", it.message)
            })
        }

POST網絡請求

舉兩個例子:

  • body是form-data
 val url2 = "http://192.168.0.101:8888/saveuser"

        Fuel.post(url2, listOf("name" to "李四","age" to 18)).responseObject<User> { request, response, result ->
            result.fold({
                Log.e("test",it.name)
            },{
                Log.e("test", it.message)
            })
        }
  • body是raw
        val url3 = "http://192.168.0.101:8889/name"

        val requestBean = User("王五", 22)
        val requestData = Gson().toJson(requestBean)
        val type = mutableMapOf<String, String>()
        type["Content-Type"] = "application/json"

        Fuel.post(url3)
            .body(requestData)
            .header(type)
            .responseString { _, _, result ->
                result.fold({
                    Log.e("test", it)
                }, {
                    Log.e("test", it.message)
                })
            }

更多示例請參考文檔:Fuel文檔

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容