Android——Retrofit
Retrofit
简介:对OkHttp的封装
根据请求接口,获取响应
注解
方法注解
@GET:声明为GET请求方式,@GET(""):详细路径
@POST:声明为POST请求方式,@POST(“”):详细路径
@HTTP:声明为自定义请求方式
@FormUrlEncoding:对post请求,声明请求体为表单
@Multipart:对post请求,声明请求体为多类型
@Streaming:对post请求,声明请求体为流
参数注解
@Query:对get请求:设置接受的参数名
@Field:对post请求:设置接受的参数名
@QueryMap:对get请求:设置接受参数为Map<String,String>集合
@FieldMap:对post请求:设置接受参数为Map<String,String>集合
@Part:对post请求:设置上次的文件
其他注解
@Path
@Header:加入请求头
@Headers:在方式上写死请求头
方法
(Retrofit)
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.httpbin.org/").build();
返回值类型:Retrofit
返回值作用:生成Retrofit对象
作用:根据基本url,生成Retrofit对象
Retrofit retrofit.create(HttpbinService.class);
参数:
HttpbinService.class 是请求接口对象
返回值:HttpbinService 接口对象
返回值意义:获取请求接口对象
作用:获取请求接口对象,调用请求接口定义的方法
使用
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
测试接口:https://www.wanandroid.com/
测试Api:user/login
参数:username, password
值:lanceedu , 123123
创建JavaBean,指定Call泛型的对象
public class BaseResponse { private Data data; private int errorCode; private String errorMsg; public Data getData() { return data; } public void setData(Data data) { this.data = data; } public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } public String getErrorMsg() { return errorMsg; } public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } @Override public String toString() { return "BaseResponse{" + "data=" + data + ", errorCode=" + errorCode + ", errorMsg='" + errorMsg + '\'' + '}'; } }
public class Data { private boolean admin; private List<String> chapterTops; private int coinCount; private List<Integer> collectIds; private String email; private String icon; private long id; private String nickname; private String password; private String publicName; private String token; private int type; private String username; @Override public String toString() { return "Data{" + "admin=" + admin + ", chapterTops=" + chapterTops + ", coinCount=" + coinCount + ", collectIds=" + collectIds + ", email='" + email + '\'' + ", icon='" + icon + '\'' + ", id=" + id + ", nickname='" + nickname + '\'' + ", password='" + password + '\'' + ", publicName='" + publicName + '\'' + ", token='" + token + '\'' + ", type=" + type + ", username='" + username + '\'' + '}'; } public boolean isAdmin() { return admin; } public void setAdmin(boolean admin) { this.admin = admin; } public List<String> getChapterTops() { return chapterTops; } public void setChapterTops(List<String> chapterTops) { this.chapterTops = chapterTops; } public int getCoinCount() { return coinCount; } public void setCoinCount(int coinCount) { this.coinCount = coinCount; } public List<Integer> getCollectIds() { return collectIds; } public void setCollectIds(List<Integer> collectIds) { this.collectIds = collectIds; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPublicName() { return publicName; } public void setPublicName(String publicName) { this.publicName = publicName; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
生成PostService接口
public interface PostService { @POST("user/login") @FormUrlEncoded Call<BaseResponse> post(@Field("username")String username,@Field("password")String password); @POST("user/login") @FormUrlEncoded Call<BaseResponse> login(@Field("username")String username,@Field("password")String password); }
通过retrofit对象获取接口实现对象
public void test2(){ // 用构造者模式 设置基础地址和Gson工厂获取retrofit retrofit1 = new Retrofit.Builder() .baseUrl("https://www.wanandroid.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); // 用retrofit 创建接口实现调用方法 // 响应头,响应体,参数名 // 构造者,基础地址,Gson工厂,接口实现类。 retrofit1.create(PostService.class) .login("lanceedu","123123") .enqueue(new Callback<BaseResponse>() { @Override public void onResponse(Call<BaseResponse> call, Response<BaseResponse> response) { Log.i(TAG, "onResponse: "+response.body().toString()); } @Override public void onFailure(Call<BaseResponse> call, Throwable t) { } }); }
简单描述:
接口:响应行,响应体,参数名
请求方式:使用retrofit对象设置基础地址,gson转换器,创建请求接口实现对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?