All Projects → hyzhan43 → Ktarmor Mvvm

hyzhan43 / Ktarmor Mvvm

Licence: apache-2.0
👻 Android快速开发框架, KtArmor 寓意着 为Android 赋予战斗装甲, 方便开发者快速进行Android 开发。

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Ktarmor Mvvm

Sample Code Movies
This repository contains sample code. Its purpose being, to quickly demonstrate Android and software development in general, clean code, best practices, testing and all those other must know goodies.
Stars: ✭ 81 (-45.27%)
Mutual labels:  coroutines, mvvm, viewmodel, retrofit, livedata
KotlinEverywhere
This application created for Kotlin Everywhere series as a codelab. It will show step by step Kotlin and Android Jetpack Components fundamentals. 🚀🚀
Stars: ✭ 52 (-64.86%)
Mutual labels:  coroutines, retrofit, viewmodel, livedata
Awesome Android Kotlin Apps
👓 A curated list of awesome android kotlin apps by open-source contributors.
Stars: ✭ 1,058 (+614.86%)
Mutual labels:  coroutines, mvvm, viewmodel, retrofit
Wanandroid
Jetpack MVVM For Wanandroid 最佳实践 !
Stars: ✭ 1,004 (+578.38%)
Mutual labels:  coroutines, mvvm, viewmodel, livedata
Jetpackmvvm
🐔🏀一个Jetpack结合MVVM的快速开发框架,基于MVVM模式集成谷歌官方推荐的JetPack组件库:LiveData、ViewModel、Lifecycle、Navigation组件 使用Kotlin语言,添加大量拓展函数,简化代码 加入Retrofit网络请求,协程,帮你简化各种操作,让你快速开发项目
Stars: ✭ 1,100 (+643.24%)
Mutual labels:  mvvm, viewmodel, retrofit, livedata
Jethub
Sample App with Jetpack components(LiveData, Navigation, ViewModel) + MVVM + coroutine + single activity
Stars: ✭ 224 (+51.35%)
Mutual labels:  coroutines, mvvm, viewmodel, livedata
WanAndroidJetpack
🔥 WanAndroid 客户端,Kotlin + MVVM + Jetpack + Retrofit + Glide。基于 MVVM 架构,用 Jetpack 实现,网络采用 Kotlin 的协程和 Retrofit 配合使用!精美的 UI,便捷突出的功能实现,欢迎下载体验!
Stars: ✭ 124 (-16.22%)
Mutual labels:  coroutines, retrofit, viewmodel, livedata
ComposeMovie
Movie app that built with Jetpack Compose
Stars: ✭ 96 (-35.14%)
Mutual labels:  coroutines, retrofit, viewmodel, livedata
DeezerClone
This Application using Dagger Hilt, Coroutines, Flow, Jetpack (Room, ViewModel, LiveData),Navigation based on MVVM architecture.
Stars: ✭ 81 (-45.27%)
Mutual labels:  coroutines, mvvm, viewmodel, livedata
Aachulk
️🔥️🔥️🔥AACHulk是以Google的ViewModel+DataBinding+LiveData+Lifecycles框架为基础, 结合Okhttp+Retrofit+BaseRecyclerViewAdapterHelper+SmartRefreshLayout+ARouter打造的一款快速MVVM开发框架
Stars: ✭ 109 (-26.35%)
Mutual labels:  mvvm, viewmodel, retrofit, livedata
Kotlinjetpackinaction
🔥🔥 Kotlin Jetpack zero to hero. 新手到高手
Stars: ✭ 264 (+78.38%)
Mutual labels:  coroutines, mvvm, viewmodel, livedata
Movieapp Clean Architecture
Learning Project (Movie App) For Applying Android Architecture Components And Clean Architecture Using MVVM With Kotlin
Stars: ✭ 123 (-16.89%)
Mutual labels:  coroutines, mvvm, viewmodel, livedata
Tdcapp
Sample app which access the TDC (The Developer's Conference) REST API.
Stars: ✭ 55 (-62.84%)
Mutual labels:  mvvm, viewmodel, retrofit, livedata
Mentorship Android
Mentorship System is an application that matches women in tech to mentor each other, on career development, through 1:1 relations during a certain period of time. This is the Android application of this project.
Stars: ✭ 117 (-20.95%)
Mutual labels:  mvvm, viewmodel, retrofit, livedata
Gallerit
A sample Android gallery to search images posted on Reddit built using modern Android development tools (Architecture Components, MVVM, Coroutines, Flow, Navigation, Retrofit, Room, Koin)
Stars: ✭ 153 (+3.38%)
Mutual labels:  coroutines, mvvm, viewmodel, livedata
PlayAndroid
✌️✊👋玩安卓Mvvm组件化客户端,整合Jetpack组件DataBinding、ViewModel以及LiveData;屏幕适配✔️状态栏沉浸式✔️黑夜模式✔️,无数据、加载失败状态页;骨架屏、Koin依赖注入等
Stars: ✭ 193 (+30.41%)
Mutual labels:  retrofit, mvvm, viewmodel, livedata
Moko Mvvm
Model-View-ViewModel architecture components for mobile (android & ios) Kotlin Multiplatform development
Stars: ✭ 329 (+122.3%)
Mutual labels:  coroutines, mvvm, viewmodel, livedata
Jetpack Wanandroid
Kotlin+Jetpack+Coroutines+Retrofit+koin 完成的MVVM 组件化客户端 🔥🔥
Stars: ✭ 353 (+138.51%)
Mutual labels:  coroutines, mvvm, viewmodel, livedata
Android Architecture Components Mvvm Retrofit Java
This repository contains Android Architecture Components ( LiveData , View Model and MVVM pattern with retrofit for consuming rest api )
Stars: ✭ 63 (-57.43%)
Mutual labels:  mvvm, viewmodel, livedata
Foodium
It simply loads Posts data from API and stores it in persistence storage (i.e. SQLite Database). Posts will be always loaded from local database. Remote data (from API) and Local data is always synchronized.
Stars: ✭ 1,940 (+1210.81%)
Mutual labels:  coroutines, mvvm, livedata

前言

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

什么是KtArmor ?

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

  • 架构模式: MVVM + Kotlin + Androidx + ViewModel + LiveData
  • 网络请求: Retrofit + Okhttp + Coroutine + RxJava + DataBinding
  • 代码:简洁优雅, 易扩展
  • 文档: 有相关的KtArmor-MVVM 系列文档说明 (后续补充)
  • 功能:
    • 基本IActivityIFragment
    • MVVM框架封装 IMvmActivityIMvmFragmentBaseViewModelBaseRepository封装
    • 网络请求封装 BaseOkHttpClientBaseRetrofitRetrofitFactory
    • 常用控件PlaceHolderView(占位布局)LoadingView(加载框)
    • 常用扩展封装 KtWing 框架(SharedPreferencesStartActivityLogToast(不重复显示))等
    • ....

亮点1——无需初始化

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

class BaseApplication: Application(){

    override fun onCreate() {
        super.onCreate()

        // 初始化KtArmor (不再需要)
        // KtArmor.init(this, MyRetrofitConfig()) 
    }
}

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

亮点2——无需继承

大部分的 Android 快速开发的脚手架,都是需要继承 BaseXXXActivityXXXActivity 等 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<LoginRsp>
}

我们通常使用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 添加:

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<LoginRepository>() {

    val loginData = MutableLiveData<LoginRsp>()

    fun login(account: String, password: String) {
        
        // 校验参数
        if (TextUtils.isEmpty(account) || TextUtils.isEmpty(password)) {
            showToast(R.string.account_or_password_empty)
            return
        }

        // DSL 方式发起 网络请求
        quickLaunch<LoginRsp> {

            onStart { showLoading() }
            
            request { repository.login(account, password) }

            onSuccess { loginData.value = it }
        }
    }
}
  • 需创建 LoginViewModel类,继承BaseViewModel,并传入 LoginRepository,自动注入 LoginRepositoy 实例。
  • quickLaunch<XXX> 方法是使用 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<LoginRsp>
}

// 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<LoginRsp> {
        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 一起交流学习。

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

示例项目

Kotlin 版 玩Android

其他相关

Kotlin的魔能机甲——KtArmor(一)

Kotlin的魔能机甲——KtArmor插件篇(二)

Kotlin的魔能机甲——KtArmor(三)

Kotlin的魔能机甲——KtArmor网络调用封装(四)

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].