Retrofit网络框架搭建
来源:互联网 发布:那个程序员txt总攻大人 编辑:程序博客网 时间:2024/05/22 00:45
项目地址https://github.com/helloworld107/ZhNews
本项目运用了很多新鲜前沿的技术,mvp+rxjava+retrofit+5.0系统新特性布局,recycerview,项目结构不算复杂,对于学习新技术的朋友有很好的教学意义,下面开始撸代码,分析一下该项目的核心知识点部分
先看框架
大体上工具类,自定义控件,适配器,bean实体类与mvc并没有任何不同,由于使用的mvp+rxjava+retrofit,差异的地方在于api获取方式,和presenter,view接口,咱们先从简单的来,看看网络请求的类
这是栏目其中的一个api,如果按照retrofit的方式返回的应该是一个
Call<ResponseBody>.由于结合rxjava,所以返回一个被观察者对象observable,具体对应的实体类都是json解析很简单这里不多说,
通过这种写法就可以通过rxjava的方法调用了。
public interface DailyApi {
@GET("homes/index/{num}.json")
Observable<DailyTimeLine> getDailyTimeLine(@Path("num") String num);
@GET("options/index/{id}/{num}.json")
Observable<DailyTimeLine> getDailyFeedDetail(@Path("id") String id, @Path("num") String num);
}
之后写一个返回对应retrofit的类
public classApiRetrofit {
//三个基本网址
public static finalStringZHIHU_BASE_URL="http://news-at.zhihu.com/api/4/";
public static finalStringGANK_BASE_URL="http://gank.io/api/";
public static finalStringDAILY_BASE_URL="http://app3.qdaily.com/app3/";
//三个访问类
publicZhihuApiZhihuApiService;
publicGankApiGankApiService;
publicDailyApiDailyApiService;
publicZhihuApi getZhihuApiService() {
returnZhihuApiService;
}
publicGankApi getGankApiService() {
returnGankApiService;
}
publicDailyApi getDailyApiService() {
returnDailyApiService;
}
//饿汉模式,构造方法的时候就把类都创建好了
ApiRetrofit() {
//搞一个自己的缓存
File httpCacheDirectory =newFile(MyApp.mContext.getCacheDir(),"responses");
intcacheSize = 10*1024*1024;// 10 MiB
Cache cache =newCache(httpCacheDirectory,cacheSize);
OkHttpClient client=newOkHttpClient.Builder().addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR).
//这里有个拦截器,用来监测访问数据的信息以及更改一些参数,这里不是重点代码略过
cache(cache).build();
Retrofit retrofit_zhihu =newRetrofit.Builder()
.baseUrl(ZHIHU_BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())结合rxjava的必要写法
.build();
Retrofit retrofit_gank =newRetrofit.Builder()
.baseUrl(GANK_BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
Retrofit retrofit_daily=newRetrofit.Builder()
.baseUrl(DAILY_BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
ZhihuApiService=retrofit_zhihu.create(ZhihuApi.class);
GankApiService=retrofit_gank.create(GankApi.class);
DailyApiService=retrofit_daily.create(DailyApi.class);
}
这样一来就可以在开发中调用了,不过作者又优化了一下,写了一个工厂类实习单例,同步锁
public classApiFactory {
//新的单例模式写法,靠一个静态类来位置单例
protected static final Object monitor=newObject();
staticZhihuApi zhihuApiSingleton=null;
staticGankApi gankApiSingleton=null;
staticDailyApi dailyApiSingleton=null;
//return Singleton
//return Singleton
public staticZhihuApi getZhihuApiSingleton() {
synchronized(monitor) {
if(zhihuApiSingleton==null) {
zhihuApiSingleton=newApiRetrofit().getZhihuApiService();
}
returnzhihuApiSingleton;
}
}
public staticGankApi getGankApiSingleton() {
synchronized(monitor) {
if(gankApiSingleton==null) {
gankApiSingleton=newApiRetrofit().getGankApiService();
}
returngankApiSingleton;
}
}
public staticDailyApi getDailyApiSingleton() {
synchronized(monitor) {
if(dailyApiSingleton==null) {
dailyApiSingleton=newApiRetrofit().getDailyApiService();
}
returndailyApiSingleton;
}
}
}
0 0
- Retrofit网络框架搭建
- Retrofit网络框架搭建
- 使用Retrofit搭建自己的网络请求框架
- Retrofit搭建网络请求框架,所有项目可用
- Android 一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 搭建MVP+Retrofit+RxJava网络请求框架
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)
- 网络框架 Retrofit
- retrofit网络请求框架
- retrofit网络框架
- 网络请求框架:Retrofit
- 网络请求框架Retrofit
- 网络框架-retrofit,okhttp
- Android_网络框架--Retrofit
- Retrofit网络请求框架
- 从0开始搭建rxjava+retrofit+mvp+dagger2整合基础框架(rxjava+retrofit网络层搭建)
- Retrofit+okhttp网络框架介绍
- Linux的常用命令
- HDU2086 找规律 好心酸!!!!!
- muduo源码中的时间类
- windows下解决端口被占用
- 第九周项目2- 对称矩阵压缩存储的实现与应用(2)
- Retrofit网络框架搭建
- ADO.NET基础(1) 连接数据库
- 搬砖之路之CardView
- protobuf-3.0.0-beta-2在Ubuntu14.04的安装
- jar命令的使用教程
- HDU2087 找字符串 strstr 不错
- HDU2088 水题 竟然忘了初始化 一直wa
- 利用循环求出分数:2/1,3/2,5/3,8/5,13/8,21/13……前20项的和。
- HDU2089 sprintf strstr 的运用 打表