配置:
在app的build.gradle中添加依赖:
implementation("com.squareup.retrofit2:retrofit:2.9.0")
因为retrofit本身是okhttp的封装,所以导入retrofit内部也导入了okhttp
接口创建:
public interface HttpbinService {
@POST("post")
@FormUrlEncoded
Call<ResponseBody> post(@Field("username") String username, @Field("password") String pwd);
@GET("get")
Call<ResponseBody> get(@Query("username") String username, @Query("password") String pwd);
}
retrofit使用时基于接口的,书写其中的post、get方法,方法注解xxx,参数注解abc,在请求处的体现就是:https://www.httpbin.org/xxx?abc=username
这种形式,可以对照okhttp使用样例对比学习。
可以看做retrofit帮助我们完成了域名请求的字符串拼写。
主函数:
Retrofit retrofit;
HttpbinService httpbinService;
retrofit = new Retrofit.Builder().baseUrl("https://www.httpbin.org/").build();
httpbinService = retrofit.create(HttpbinService.class);
首先根据基础url创建retrofit对象,再依据接口由retrofit创建接口实例。
public void postAsync(View view) {
retrofit2.Call<ResponseBody> call = httpbinService.post("abc", "123");
call.enqueue(new retrofit2.Callback<ResponseBody>() {
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
try {
Log.i("TAG", "postAsync: " + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
Log.i("TAG", t.toString());
}
});
调用可以直接用接口实例调用方法,传入参数,获取call实例。
剩余和okhttp相同,用call的方法对服务器进行请求等操作。