一,导入依赖
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()}")
}
}