1..Const(常量池)
/** * companion object 伴生对象,类似Java中的静态块static{} ,但是在kotlin中,他的生命周期跟随当前类,其中的内容都是静态的 * const val代表一个常量,对应Java中的public static final */
class Const { companion object{ const val BASE_URL="http://10.161.9.80:7012" const val URL_LOGIN="/user/loginjson" const val URL_REGISTER="" const val PARAM_USERNAME="username" const val PARAM_PASSWORD="password" const val PARAM_REPASSWORD="repassword" const val MAIN_URL="application/json" } }
2.ApiService
interface ApiService { @GET(Const.URL_FOOD) fun getFoods(): Observable<FoodBeanResult> //登录请求 @POST(Const.URL_LOGIN) fun login(@Body body:RequestBody):Observable<LoginBeanResult> }
3.RetrofitManager(管理类)
class RetrofitManager { companion object{ fun getRetrofit(): Retrofit { //Okhttp val okHttpClient =OkHttpClient.Builder() .readTimeout(30,TimeUnit.SECONDS) .writeTimeout(30,TimeUnit.SECONDS) .connectTimeout(30,TimeUnit.SECONDS) .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) //Retrofit val retrofit=Retrofit.Builder() .baseUrl(Const.baseUrl) .client(okHttpClient.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) return retrofit.build() } } }
4.base层
4.1baseRepo/basemodel
/** * repo数据仓库,替代model因为在MVVM模式中viewmodel和model的叫法容易冲突,所有用repo代替 * repository 仓库(全拼) * 要想让别的类可以继承当前类,需要在class前加上open或者abstract * * 主要功能:对外提供apiService,可以直接调用其中的接口请求方法 */ open class BaseRepo { fun getService(): ApiService = RetrofitManager.getRetrofit().create(ApiService::class.java) }
4.2baseviewmodel
/** * BaseViewModel,主要功能继承viewModel,目前没有其他功能 */ open class BaseViewModel:ViewModel() { }
4.3baseActivity
abstract class BaseMVVMActivity<VDB: ViewDataBinding> :AppCompatActivity() { protected lateinit var dataBinding:VDB override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //1.绑定视图 dataBinding= DataBindingUtil.setContentView(this,getLayoutId()) //2.初始化控件 initView() //3.初始化数据 initData() } abstract fun initData() abstract fun initView() abstract fun getLayoutId(): Int }
4.4baseFragment
abstract class BaseMVVMFragment<VDB: ViewDataBinding>:Fragment() { protected lateinit var dataBinding:VDB override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { dataBinding= DataBindingUtil.inflate(inflater,getLayoutId(),container,false) return dataBinding.root } abstract fun getLayoutId(): Int override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initView() initData() } abstract fun initData() abstract fun initView() }