android kt框架,GitHub - bitxiao/KtArmor-MVVM: Android快速开发框架, KtArmor 寓意着 为Android 赋予战斗装甲, 方便开发者快速进行An...

68747470733a2f2f6a69747061636b2e696f2f762f68797a68616e34332f4b7441726d6f722d4d56564d2e737667

前言

学习了Kotlin有一段时间了, 每次写项目/Demo的时候, 总是用到网络请求、MVP、MVVM、常用工具类、通用自定义View, 索性把这些整合到一起, 搭成一个Android的脚手架——KtArmor. 框架是我个人经验的积累, 总结. 如有不妥, 望各位大佬指出.

什么是KtArmor ?

KtArmor 寓意着 为Android 赋予战斗装甲, 方便开发者快速进行Android 开发。节约开发者开发时间。

架构模式: MVVM + Kotlin + Androidx + ViewModel + LiveData

网络请求: Retrofit + Okhttp + Coroutine + RxJava + DataBinding

代码:简洁优雅, 易扩展

文档: 有相关的KtArmor-MVVM 系列文档说明 (后续补充)

功能:

基本IActivity、IFragment

MVVM框架封装 IMvmActivity、IMvmFragment、BaseViewModel、BaseRepository封装

网络请求封装 BaseOkHttpClient、BaseRetrofit、RetrofitFactory

常用控件PlaceHolderView(占位布局), LoadingView(加载框)

常用扩展封装 KtWing 框架(SharedPreferences、StartActivity、Log、Toast(不重复显示))等

....

亮点1——无需初始化

一般而言,使用第三方框架都需要进行相关初始化操作。如下:

class BaseApplication: Application(){

override fun onCreate() {

super.onCreate()

// 初始化KtArmor (不再需要)

// KtArmor.init(this, MyRetrofitConfig())

}

}

若无需定制 Retrofit 相关配置的话,KtArmor-MVVM 会自动初始化,无需手动 init

亮点2——无需继承

大部分的 Android 快速开发的脚手架,都是需要继承 BaseXXXActivity、XXXActivity 等 Activity 封装的基类,但是这往往不能解决多继承的问题,也这样大大限制了开发者自由,所以在 KtArmor-MVVM 框架中,采用了 接口的形式,无需继承 BaseXXXActivity,实现对应接口(IActivity,IMvmActivity) 即可,后面有相关Login使用教程例子参考。

亮点3——自动“注入”

@BindViewModel

class LoginActivity : AppCompatActivity(), IMvmActivity {

@BindViewModel // 看这里!!

lateinit var viewModel: LoginViewModel

//...省略其他

}

通过 @BindViewModel 注解viewModel 变量,KtArmor-MVVM 通过反射,自动创建 LoginViewModel实例, 并赋值给 viewModel 变量。直接使用即可!

@BaseUrl

@BaseUrl(API.BASE_URL) // 看这里!!

interface ApiService {

@POST(API.LOGIN)

suspend fun login(@Query("username") username: String,

@Query("password") password: String): BaseResponse

}

我们通常使用Retrofit 的时候,都会创建对应 Service 接口类, 通过在 Service 上 标识 @BaseUrl 注解,并传入 对应 baseUrl,KtArmor-MVVM 就会将 baseUrl “注入” 到 Retrfit 中。目前只是针对单个 baseUrl, 后续将考虑多个 baseUrl 动态切换的相关处理。

KtArmor-MVVM框架引入

注意!

由于采用了Androidx, 所以如果不是Androidx的话, 引入会有兼容性问题(会报错!).

版本: minSdkVersion 19

以下默认是Androidx 项目下引入

先在 build.gradle(Project:XXXX) 的 repositories 添加:

allprojects {

repositories {

...

maven { url "https://jitpack.io" }

}

}

然后在 build.gradle(Module:app) 的 dependencies 添加:

68747470733a2f2f6a69747061636b2e696f2f762f68797a68616e34332f4b7441726d6f722d4d56564d2e737667

implementation 'com.github.hyzhan43:KtArmor-MVVM:1.0.8' //查看最新版本

快速上手

我们先从一个 简单登录功能来熟悉一下 KtArmor-MVVM 使用流程。

LoginActivity

class LoginActivity : AppCompatActivity(), IMvmActivity {

@BindViewModel

lateinit var viewModel: LoginViewModel

override fun getLayoutId(): Int = R.layout.activity_login

override fun initListener() {

mBtnLogin.setOnClickListener {

viewModel.login(mEtAccount.str(), mEtPassword.str())

}

}

override fun dataObserver() {

viewModel.loginData.observe(this, Observer {

toast("登录成功")

})

}

}

1、新建一个 LoginActivity 类,并实现 IMvmActivity “接口”。

2、然后使用 @BindViewModel 绑定一个 ViewModel,KtArmor-MVVM 会自动注入赋值。

3、getLayoutId()方法,返回一个 R.layout.activity_login (布局id)

4、initListener()方法中设置 登录按钮事件 (mBtnLogin),通过 viewModel 来发起网络请求。

5、然后 在dataObserver()监听回调的结果即可。

然后我们再来看看, VM 层如何实现,也就是 LoginViewModel。

LoginViewModel

class LoginViewModel : BaseViewModel() {

val loginData = MutableLiveData()

fun login(account: String, password: String) {

// 校验参数

if (TextUtils.isEmpty(account) || TextUtils.isEmpty(password)) {

showToast(R.string.account_or_password_empty)

return

}

// DSL 方式发起 网络请求

quickLaunch {

onStart { showLoading() }

request { repository.login(account, password) }

onSuccess { loginData.value = it }

}

}

}

需创建 LoginViewModel类,继承BaseViewModel,并传入 LoginRepository,自动注入 LoginRepositoy 实例。

quickLaunch 方法是使用 DSL 方式发起网络请求

repository login 方法真正发起网络请求

onSuccess() 方法 监听回调结果,并设置给 LoginData

最后,我们来看看 Repository 的处理。

LoginRepository

// 注意这里!

@BaseUrl(API.BASE_URL)

interface ApiService {

@POST(API.LOGIN)

suspend fun login(@Query("username") username: String,

@Query("password") password: String): BaseResponse

}

// ServiceFactory.kt

object ServiceFactory {

// 初始化 ApiService

val apiService by lazy { RetrofitFactory.create(ApiService::class.java) }

}

// LoginRepository.kt

class LoginRepository {

suspend fun login(account: String, password: String): BaseResponse {

return ServiceFactory.apiService.login(account, password)

}

}

创建一个 ApiService,这里需要在class 类上 设置 @BaseUrl 注解,value 值为 baseUrl,其他按照正常 retrofit 使用即可。

然后使用 RetrofitFactory.create() 来创建对应 ApiService。RetrofitFactory封装了Retrofit 创建流程。

最后 在LoginRepository 中即可使用 ServiceFactory.apiService.login 来发起网络请求即可。

期待

KtArmor-MVVM 框架是一款小而美的框架,也是我个人经验的积累, 总结,希望大家喜欢。

如果你有更好的建议欢迎 pr,issues 一起交流学习。

如有不妥, 望各位大佬指出。

示例项目

其他相关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值