kotlin for android----------MVP模式实现登录

时间:2022-09-09 20:08:24

学习了Kotlin,随便来个小案例,以MVP+Kotlin 来实现登录的一个小案例,希望对大家有所帮助,效果图:

    kotlin for android----------MVP模式实现登录

MVP:

Model

Model 是用户界面需要显示数据的抽象,也可以理解为从业务数据(结果)那里到用户界面的抽象。

View

视图这一层体现的很轻薄,负责显示数据、提供友好界面跟用户交互就行。MVP下Activity和Fragment体现在了这一层,Activity一般也就做加载UI视图、设置监听再交由Presenter处理的一些工作,所以也就需要持有相应Presenter的引用。

Presenter

Presenter这一层处理着程序各种逻辑的分发,收到View层UI上的反馈命令、定时命令、系统命令等指令后分发处理逻辑交由业务层做具体的业务操作,然后将得到的 Model 给 View 显示。

 

Model

class ModelImple : IModel{

override fun onLogin(name: String, pwd: String,onLoginSetListenter: IModel.IOnLoginSetListenter) {
if (name.isEmpty()) {
if (onLoginSetListenter != null) {
onLoginSetListenter.onError("输入用户名为空")
return
}
}
if (pwd.isEmpty()) {
if (onLoginSetListenter != null) {
onLoginSetListenter.onError("输入密码为空")
return
}
}
if (name.equals("zq") && pwd.equals("123456")){
if (onLoginSetListenter != null)
onLoginSetListenter.onSuccess("登录成功")
}else{
if (onLoginSetListenter != null) {
onLoginSetListenter.onError("登录失败")
}
}
}
}

presenter


class Presenter : BasePerenter<IVew>(){

var Imodel: IModel? = null
init {
Imodel = ModelImple()
}

fun onLogin(name: String,pwd: String){
var iView = getView()
/*if (false){
//验证网络
if (iView != null) {
iView.onNetWork("网络未连接")
}
}*/

Imodel!!.onLogin(name,pwd,object : IModel.IOnLoginSetListenter{

override fun onSuccess(success: String) {
if (iView != null){
iView.showLoading(success)
}
}

override fun onError(error: String) {
if (iView != null){
iView.onError(error)
}
}
})

}

}

activity

class MainActivity : BaseActivity<IVew,Presenter>(),IVew{

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn.setOnClickListener {
p!!.onLogin(username.text.toString(),password.text.toString())
}
}

override fun createPresenter(): Presenter {
return Presenter()
}

override fun showLoading(msg: String) {
toast(msg)
}

override fun onNetWork(net: String) {
toast(net)
}

override fun onError(error: String) {
toast(error)
}

}

由于代码太多,完整代码未给出,源码直接下载即可

源码点击下载