}
通過 @BindViewModel
注解viewModel 變量,KtArmor-MVVM 通過反射
,自動(dòng)創(chuàng)建 LoginViewModel
實(shí)例, 并賦值給 viewModel 變量。直接使用即可!
@BaseUrl
@BaseUrl(API.BASE_URL) // 看這里!!
interface ApiService {
@POST(API.LOGIN)
suspend fun login(@Query(“username”) username: String,
@Query(“password”) password: String): BaseResponse
}
我們通常使用Retrofit 的時(shí)候,都會(huì)創(chuàng)建對(duì)應(yīng) Service
接口類, 通過在 Service 上 標(biāo)識(shí) @BaseUrl 注解,并傳入 對(duì)應(yīng) baseUrl,KtArmor-MVVM 就會(huì)將 baseUrl
“注入” 到 Retrfit 中。目前只是針對(duì)單個(gè)
baseUrl, 后續(xù)將考慮多個(gè) baseUrl 動(dòng)態(tài)切換的相關(guān)處理。
KtArmor-MVVM框架引入
注意!
- 由于采用了
Androidx
, 所以如果不是Androidx的話, 引入會(huì)有兼容性
問題(會(huì)報(bào)錯(cuò)!). - 版本: minSdkVersion
19
以下默認(rèn)是Androidx
項(xiàng)目下引入
先在 build.gradle(Project:XXXX) 的 repositories 添加:
allprojects {
repositories {
…
maven { url “https://jitpack.io” }
}
}
然后在 build.gradle(Module:app) 的 dependencies 添加:
implementation ‘com.github.hyzhan43:KtArmor-MVVM:1.0.7’ //最新版本
快速上手
我們先從一個(gè) 簡(jiǎn)單登錄功能來熟悉一下 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、新建一個(gè)
LoginActivity
類,并實(shí)現(xiàn)IMvmActivity
“接口”
。 -
2、然后使用
@BindViewModel
綁定一個(gè) ViewModel,KtArmor-MVVM 會(huì)自動(dòng)注入賦值。 -
3、getLayoutId()方法,返回一個(gè) R.layout.activity_login (布局id)
-
4、initListener()方法中設(shè)置 登錄按鈕事件 (mBtnLogin),通過
viewModel
來發(fā)起網(wǎng)絡(luò)請(qǐng)求。 -
5、然后 在dataObserver()監(jiān)聽回調(diào)的結(jié)果即可。
然后我們?cè)賮砜纯矗?VM 層如何實(shí)現(xiàn),也就是 LoginViewModel。
LoginViewModel
class LoginViewModel : BaseViewModel() {
val loginData = MutableLiveData()
fun login(account: String, password: String) {
// 校驗(yàn)參數(shù)
if (TextUtils.isEmpty(account) || TextUtils.isEmpty(password)) {
showToast(R.string.account_or_password_empty)
return
}
// DSL 方式發(fā)起 網(wǎng)絡(luò)請(qǐng)求
quickLaunch {
onStart { showLoading() }
request { repository.login(account, password) }
onSuccess { loginData.value = it }
}
}
}
- 需創(chuàng)建 LoginViewModel類,繼承
BaseViewModel
,并傳入LoginRepository
,自動(dòng)注入 LoginRepositoy 實(shí)例。 -
quickLaunch<XXX>
方法是使用DSL
方式發(fā)起網(wǎng)絡(luò)請(qǐng)求 -
repository
login 方法真正發(fā)起網(wǎng)絡(luò)請(qǐng)求 -
onSuccess()
方法 監(jiān)聽回調(diào)結(jié)果,并設(shè)置給LoginData
最后,我們來看看 Repository 的處理。
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Android工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Android移動(dòng)開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Android開發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新
如果你覺得這些內(nèi)容對(duì)你有幫助,可以添加V獲?。簐ip204888 (備注Android)
總結(jié)
作為一名從事Android的開發(fā)者,很多人最近都在和我吐槽Android是不是快要涼了?而在我看來這正是市場(chǎng)成熟的表現(xiàn),所有的市場(chǎng)都是溫水煮青蛙,永遠(yuǎn)會(huì)淘汰掉不愿意學(xué)習(xí)改變,安于現(xiàn)狀的那批人,希望所有的人能在大浪淘沙中留下來,因?yàn)閷?duì)于市場(chǎng)的逐漸成熟,平凡并不是我們唯一的答案!
遠(yuǎn)會(huì)淘汰掉不愿意學(xué)習(xí)改變,安于現(xiàn)狀的那批人,希望所有的人能在大浪淘沙中留下來,因?yàn)閷?duì)于市場(chǎng)的逐漸成熟,平凡并不是我們唯一的答案!
[外鏈圖片轉(zhuǎn)存中…(img-vmXZfSd0-1711874432523)]
[外鏈圖片轉(zhuǎn)存中…(img-nERTV93D-1711874432523)]文章來源:http://www.zghlxwxcb.cn/news/detail-845998.html
本文已被CODING開源項(xiàng)目:《Android學(xué)習(xí)筆記總結(jié)+移動(dòng)架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》收錄文章來源地址http://www.zghlxwxcb.cn/news/detail-845998.html
到了這里,關(guān)于新鮮出爐的 MVVM 腳手架 —— KtArmor-MVVM,面試安卓系統(tǒng)架構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!