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

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

    源码点击下载

  • 相关阅读:
    java内存区域
    [POJ] John‘s trip | 欧拉回路 | 边序列字典序最小 + 建图
    [POJ | Nowcoder] Watchcow | 欧拉回路 点路径输出
    [UPC | 山东省赛] The Largest SCC | Tarjan强连通分量瞎搞 + 状态还原
    [Luogu] 炸铁路 | Tarjan 割边
    [HDU 4738] Caocao‘s Bridges | Tarjan 求割边
    [Codeforces 1586] Omkar and Determination | 思维前缀和
    [UVA 1599] Ideal Path | 细节最短路
    [North Central NA Contest 2018] Rational Ratio | 规律 细节模拟
    [HDU 7136] Jumping Monkey | 并查集 | 逆向思维
  • 原文地址:https://www.cnblogs.com/zhangqie/p/7448773.html
Copyright © 2011-2022 走看看