个人见解:
1.Retrfit是针对OkHttp网络请求的框架(本质就是对okhttp进行了封装),对OkHttp进行了强依赖。
2.Retrofit使用了面向接口的方式进行网络请求。
3.Retrofit使用了动态生成的代理类来进行封装网络请求接口。
简单使用:
Retrofit是通过java自定义的一个接口来进行网络请求。
public interface RetrofitService {
//post请求的格式@FormUrlEncoded表示表单上传参数,@Field("username") username上传参数的字段名
@FormUrlEncoded
@POST("login")
Call<LoginResult> getSearchBooks(@Field("username") String account,
@Field("pwd") String password);
//get请求格式 ,@Query("q") q表示参数的字段名 name表示在URL加入的参数,
@GET("login1")
Call<loginresult> getSearchBook(@Query("q") String name,
@Query("tag") String tag, @Query("start") int start,
@Query("count") int count);
}
创建一个Retrofit实例
Retrofit mRetrofit = new Retrofit.Builder()
.baseUrl("http://192.168.0.136:8081/healthweb01/memebership/android/")
.client(client)//自己设置一个okhttpclient(一般用于网络超时),可以不写(实例会默认一个)
.addConverterFactory(factory)//gson转换器
//.addCallAdapterFactory(RxJavaCallAdapterFactory.create())调用rxjava
.build();
调用Retrofit网络请求
RetrofitService service=mRetrofit.create(RetrofitService.class);
Call<LoginResult> call = service.getSearchBooks("BK141217003005","123456");
call.enqueue(new Callback<LoginResult>() {
@Override
public void onResponse(Call<LoginResult> call,Response<LoginResult> response) {
//成功
}
@Override
public void onFailure(Call<LoginResult> call,Throwable throwable) {
//失败
}
});
想要取消正在请求的网络,可以调用call.cancel取消。
动态访问url
public interface RetrofitService {
quanxian这个输入的参数会成为路径{qx},{qx}=quanxian
@GET("{qx}/login")
Call<loginresult> getSearch(@Path("qx") String quanxian);
}