public interface ZhihuApi {
@GET("/api/4/news/latest")
Observable<ZhihuDaily> getLastDaily();
@GET("/api/4/news/before/{date}")
Observable<ZhihuDaily> getTheDaily(@Path("date") String date);
@GET("/api/4/news/{id}")
Observable<ZhihuStory> getZhihuStory(@Path("id") String id);
@GET("http://lab.zuimeia.com/wallpaper/category/1/?page_size=1")
Observable<ImageResponse> getImage();
@GET("http://caiyao.name/releases/MrUpdate.json")
Observable<UpdateItem> getUpdateInfo();
}
请求封装
public class ZhihuRequest {
private static Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR=new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
if (NetWorkUtil.isNetWorkAvailable(MicroApplication.getContext())){
int maxAge = 60;
Response response=chain.proceed(chain.request());
return response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, max-age=" + maxAge)
.build();
}else{
int maxAge = 60*60*24*28;
Response response=chain.proceed(chain.request());
return response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, max-age=" + maxAge)
.build();
}
}
};
public static File cacheFile=new File(MicroApplication.getContext().getCacheDir(),"zhihuCache");
private static int cacheSize = 10 * 1024 * 1024;
public static Cache cache=new Cache(cacheFile,cacheSize);
public static OkHttpClient client=new OkHttpClient.Builder()
.addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
.addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
.cache(cache).build();
private static ZhihuApi zhihuApi = null;
public static ZhihuApi getZhihuApi(){
synchronized (ZhihuApi.class){
if (zhihuApi==null){
zhihuApi= new Retrofit.Builder()
.baseUrl("http://news-at.zhihu.com")
.addCallAdapterFactory( RxJavaCallAdapterFactory.create())
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build().create(ZhihuApi.class);
}
}
return zhihuApi;
}
}
调用
ZhihuRequest.getZhihuApi().getImage().subscribeOn(Schedulers.io())
.map(new Func1<ImageResponse, Boolean>() {
@Override
public Boolean call(ImageResponse imageResponse) {
return true;
}
}).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Boolean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Boolean aBoolean) {
}
});