地址:https://github.com/rongkun/Dagger2Rxjava2Retrofit2Demo
kotlin版本:https://github.com/rongkun/BaseKotlin
java版本说明:
1、运行环境:Android studio3.0+(不能用2.3及以下)
2、代码介绍:
(1)baselib介绍:
如上图,base文件主要包含BaseActivity 、BaseView等基础类,精简代码,方便开发
dagger文件包含dagger2的各种配置,PerActivity为自定义注解,在Activity使用dagger2配置时经常会用到。当全局单例是用的是@Singleton,局部单例用@Scope,这里为了减少代码量自定义了PerActivity
dagger下NetModule.class为retrofit2的配置,在app全局提供单例
如何给全局提供单例呢?
首先看Base文件下的BaseApplication
代码中我们可以看到,appli在启动时就创建了DaggerAppcomponent,有人下载demo后会显示找不到文件错误,点击工具类build->make project即可解决
(2)app主module介绍
UML图解:
网络配置在net文件夹下,如图:
retrofi结合rxjava,采用背压式控制,get方法。例程为获取天气接口,baseUrl在baselib中配置。如果有不同的网址,可直接写全路径,如http://www.***/***.com/open/weather,这样将不会拼接baseurl
重点部分:
activities.main为Activity使用例子,MainContract为View及Presenter的接口。MainActivity将实现该View接口,MainPresenter实现Present接口。
Activity中调用
.appcomponent获取全局的单例,mainmodule获取局部单例(可在MainModule添加所需创建的对象),最后调用inject将这些数据注入到该Activity中
使用@Inject注入所需对象。MainPresenter的构造函数使用了@Inject注解,当创建MainPresenter时将自动调用@Inject注解的函数。因为没有在module写MainPresenter的创建方法,所以写了setpresent方法将presenter实例传给Activity