zoukankan      html  css  js  c++  java
  • kotlin for android----------MVP模式实现登录

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

        

    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)
        }
    
    }

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

    源码点击下载

  • 相关阅读:
    好吧,左小波出山了——ie8兼容indexOf问题
    jmeter负载机运行/添加压力机/分布式
    jmeter操作数据库
    Charles手机抓包设置&无法打开火狐网页设置
    python学习-Day1-接口测试
    动态SQL
    MyBatis缓存
    正则表达式
    MyBatis配置文件的配置说明
    几种数据源的配置
  • 原文地址:https://www.cnblogs.com/zhangqie/p/7448773.html
Copyright © 2011-2022 走看看