最近学习了Retrofit的基本用法,下面跟大家分享一下自己的总结
1.在app中的build.gradle添加依赖
compile 'com.squareup.retrofit2:retrofit:2.2.0'
Json解析库
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
2.
创建接口:
public interface Api{}
GET请求:
@PathQuery
@GET("user") Call<User>getUserInfoWithQuery(@Query("more") String more);@ Path
@GET("user/{id}") Call<User> getUserWithPath(@Path("id")int i);两者的区别为:
@Query是直接把参数拼接在url后面,如:url?more=more
@Path是把传进来的参数直接填进去,注意要相同的字段
POST请求:
Json格式:
先建立Bean:UserParam类
接下来创建方法:
@POST("login/json") Call<BaseResult>loginWithJson(@Body UserParam param);Form表单格式
@FormUrlEncoded @Headers({"User-Agent :"," asendi you:pengge"}) //添加头信息:字符串数组 @POST("form") Call<BaseResult>loginWithForm(@Field("name")String name,@Field("psw")String psw);其中Headers()是添加请求头信息,外字符串数组
3.创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder() .baseUrl("要访问的url") .addConverterFactory(GsonConverterFactory.create()) .build();其中加上addConverterFactory(GsonConverterFactory.creat())是在回调时能够使用自己定义的类型
接下来创建Api对象
Api api = retrofit.create(Api.class);使用getUserWithPath方法
api.getUserWithPath.enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) {使用loginWithJson方法(假设在登录时先获取用户的id,然后再获取用户的信息)User user=response.body(); Log.i(TAG, "onResponse: "+user.getUser_name());} } @Override public void onFailure(Call<News> call, Throwable t) { }});
api.loginWithJson(new UserParam("asendi", "123")).enqueue(new Callback<BaseResult>() { @Override public void onResponse(Call<BaseResult> call, Response<BaseResult> response) { if (response.isSuccessful()) { int id = response.body().getUser_id(); api.getUserInfoWithPath(id).enqueue(new Callback<User>() {//获取用户的信息 @Override public void onResponse(Call<User> call, Response<User> response) { User user = response.body(); Log.i("User", "onResponse: " + user.getUser_name() + ":" + user.getPsw()); } @Override public void onFailure(Call<User> call, Throwable t) { } }); } } @Override public void onFailure(Call<BaseResult> call, Throwable t) { } });使用Form表单方式则是直接传入对应的参数即可。