Retrofit 异步实现断点下载

1.首先,你需要创建一个Retrofit对象,并且指定api的域名:

public static final String API_URL = "https://zhuanlan.zhihu.com";
Create a very simple REST adapter which points the API.
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(API_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .build();
2. 其次,你要根据api新建一个Java接口,用Java注解来描述这个api

public interface ZhuanLanApi {
    @GET("/api/columns/{user} ")//请求网址https://zhuanlan.zhihu.com/api/colimns/{动态参数 user}
    Call getAuthor(@Path("user") String user)
}
再用这个 retrofit 对象创建一个 ZhuanLanApi 对象:

ZhuanLanApi api = retrofit.create(ZhuanLanApi.class);
Call call = api.getAuthor("qinchao");

这样就表示你要请求的api是https://zhuanlan.zhihu.com/api/columns/qinchao

最后你就可以用这个call对象获得数据了,enqueue方法是异步发送http请求的,如果你想用同步的方式发送可以使用execute()方法,call对象还提供cancel()isCancel()等方法获取这个Http请求的状态

// 请求数据,并且处理response
call.enqueue(new Callback() {
    @Override
    public void onResponse(Response author) {
        System.out.println("name: " + author.getName());
    }
    @Override
    public void onFailure(Throwable t) {
    }
});
Retrofit 只要 创建一个接口来描述Http请求 ,然后可以让我们 可以像调用Java方法一样请求一个Api ,是不是觉得很神奇,很不可思议!!

实现断点续传需要在创建retrofit的时候创建一个 Okttp3.client 对象

mRetrofit = new Retrofit.Builder()
        .addConverterFactory(GsonConverterFactory.create())
        .baseUrl(baseUrl)
        .client(getProgressClient())
        .build();

public OkHttpClient getProgressClient() {
    Interceptor interceptor = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request().newBuilder().addHeader("Range", "bytes=" + startPoints + "-").build();//startpos 就是数据库记录的已经下载的大小
            Response originalResponse = chain.proceed(request);
            return originalResponse.newBuilder().build();
        }
    };
return new OkHttpClient.Builder()
        .addNetworkInterceptor(interceptor)
        .build();

}

retroift 使用部分文章出处:http://www.jianshu.com/p/c1a3a881a144


你可能感兴趣的:(Retrofit 异步实现断点下载)