Retrofit框架的简单使用(上)

一,导入依赖

implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
implementation("com.squareup.retrofit2:converter-scalars:2.9.0")
在AndroidManifest.xml中记得申请网络权限
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

二,定义个请求接口

import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query

interface ApiService {

    companion object {
        const val BASE_URL = "https://api.sunofbeaches.com/shop/"
    }

    //最后组合成完整地址:https://api.sunofbeaches.com/shop/discovery/categories
    @GET("discovery/categories")
    //@Query注解是查询参数,如果多个参数就写多个注解,用逗号分开
    fun test(@Query("test") str: String): Call<String>

}

三,开始使用

    var TAG: String = "Xiang"

    /**
     * 创建拦截器
     */
    var intercept = HttpLoggingInterceptor {
        Log.e(TAG, "onHttpRetrofit: $it")
    }.setLevel(HttpLoggingInterceptor.Level.BODY)

    /**
     * 添加拦截器
     */
    var okHttpClient = OkHttpClient.Builder().addInterceptor(intercept).build()


    var retrofit = Retrofit.Builder()
        .baseUrl(ApiService.BASE_URL)
        .addConverterFactory(ScalarsConverterFactory.create())
        .client(okHttpClient)
        .build()

    /**
     * 获取动态代理实例
     */
    var apiService = retrofit.create(ApiService::class.java)


    /**
     * 异步请求,不用协程或者子线程。
     */
//    apiService.test("100").enqueue(object : retrofit2.Callback<String> {
//        override fun onResponse(
//            call: retrofit2.Call<String>,
//            response: retrofit2.Response<String>
//        ) {
//            /**
//             * 请求成功
//             */
//            if (response.isSuccessful) {
//                Log.e(TAG, "onResponse: ${response.body()}")
//            }
//        }
//
//        override fun onFailure(call: retrofit2.Call<String>, t: Throwable) {
//            //请求是吧
//            Log.e(TAG, "onFailure: ${t.message}")
//        }
//
//    })

    /**
     * 同步请求,必须用协程或者线程去执行,不然会阻塞UI(主)线程
     */
    GlobalScope.async {
        var response = apiService.test("100").execute();
        if (response.isSuccessful) {
            Log.e(TAG, "onResponse: ${response.body()}")
        } else {
            Log.e(TAG, "onFailure: ${response.message()}")
        }
    }

关于Post请求,请跳转 Retrofit框架的简单使用(下)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注