文章目录
前言
最近在学Kotlin,使用Kotlin来写Android,学的时候在看郭霖大神的第一行代码第三版,里面有介绍使用Retrofit2,在平时市面上也是流行使用Rxjava + Retrofit + Okhttp
书上是Kotlin版本的,虽然自己在学Kotlin但是因为还不熟练所以平时还是用Java多一点,就将书上的这部分代码改成Java
(记录在这里也供以后自己可以有思路和思考,并且以后还可以结合Rxjava一起使用) 其实基本都是郭霖大神的第一行代码第三版上的内容
接口创建
要使用Retrofit,我们是要导入依赖的
在这里,因为我将Android Studio更新到了最新的大黄蜂版本
大家更新过应该知道已经改回 mavenCentral()设计库了
所以这里我在百度上搜索 mavenCentral() 找了Retrofit的依赖
implementation'com.squareup.retrofit2:retrofit:2.9.0'
implementation'com.squareup.retrofit2:converter-gson:2.9.0'
依赖库自动将Retrofit、OkHttp、Okio一起下载 第二条是转换库转为Gson
创建接口 具体就是不同的api的定义相对路径等等
public interface GoodService {
@GET("Good/getGoodsByType?page=1&size=6&type=1")
Call<List<Good>> getGoodData();
@POST("User/Login")
Call<ResponseBody> createData(@Body UserSign userSign);
@GET("User/showUserInfo")
Call<User> getUser(@Header("Authorization") String token);
@GET("/TheActivity/login1")
Call<ResponseBody> postLogin(@Query("username") String username, @Query("password") String password);
}
这里因为我有使用就多写了下面带有Header和Query标签的,具体的话一个是header中指定参数,一个是带参数的GET请求
可以看到,使用标签来声明是GET还是POST等就可以了,然后传入相对路径,根路径我们之后在别的地方写
然后接着写类型和方法名就好了,具体的话可以仔细学习Retrofit
在这只是为了自己简单记一下
数据类就自己写就好了
直接使用
然后我们到Activity中使用:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.0.11:8080")
.addConverterFactory(GsonConverterFactory.create())
.build();
GoodService goodService = retrofit.create(GoodService.class);
goodService.getGoodData().enqueue(new Callback<List<Good>>() {
@Override
public void onResponse(Call<List<Good>> call, Response<List<Good>> response) {
}
@Override
public void onFailure(Call<List<Good>> call, Throwable t) {
}
});
根路径我们在构建Retrofit之后提供,然后往下根据你调用的接口中的方法就可以将url补充完整
构建Retrofit对象后,调用create()方法创建动态代理对象就好了,然后就是你想接下来做的了,比如更新UI等等
封装功能
最后呢 因为其实构建的Retrofit对象是全局通用的,所以我们在调用create()方式时针对不同的Service接口传入相应的类型就可以了
接下来多写一个封装请求的类
public class Util {
private static final String BASE_URI = "http://192.168.0.11:8080";
private static final Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URI)
.addConverterFactory(GsonConverterFactory.create())
.build();
public static <T> T create(Class<T> serviceClass){
return retrofit.create(serviceClass);
}
我们将创建Retrofit对象写在这里 然后有一个外部可见的create()方法 接受一个Class类型的参数,当外部调用这个方法时,实际就是调用Retrofit对象的create()方法 从而创建出Service接口的动态代理对象
然后回到Activity中修改代码:
GoodService goodService = Util.create(GoodService.class);
上面直接使用部分的代码就缩减成这样,然后就是调用接口里面定义的
goodService.getGoodData().enqueue(new Callback<List<Good>>() {
@Override
public void onResponse(Call<List<Good>> call, Response<List<Good>> response) {
}
@Override
public void onFailure(Call<List<Good>> call, Throwable t) {
}
});
这样子就可以根据不同接口创建动态代理对象,并且创建Retrofit和请求等等都进行封装
在跟着郭霖大神的第一行代码学到很多,这里都是大神书上的,只是用Java将Kotlin书上的内容复刻出来