kotlin初探mvp架构

前沿:本博客仅供大家参考交流,大神绕行,不喜勿喷.

使用工具:android studio3.0 默认支持kotlin,本文只为了摸索kotlin,有可能会出现好多细节问题,如果大家看到还请大家指明

1.本文的分包基本为

                              


2.以下是view层对应的接口,用来网络请求presenter 拿到参数

interface IloginInfoView {
    //接口参数为 usernamepwd, 额外的传个handler是为了在子线程请求到数据之后,在主线程回调
    var userName: String
    var pwd: String
    var UIHandler: Handler
    fun onResponse(response: String)

    fun onFailure(e: String?= "网络请求失败")
}

3.loginactivity页面实现该接口,并进行网络请求

class LoginActivity : AppCompatActivity(), IloginInfoView {


    private var handler: Handler = object : Handler() {     //此处的object 要加,否则无法重写 handlerMessage
        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
            if (msg?.what == 0) {
                Toast.makeText(applicationContext, "子线程消息", Toast.LENGTH_LONG).show()
            }

        }
    }
    lateinit var loginPresenter: LoginPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //使用kotlin之后,再也不用findviewbyid,是不是很爽,感觉J神的黄油刀也可以不用了 
        button.setOnClickListener(View.OnClickListener {

            loginPresenter = LoginPresenter(this)
            loginPresenter.rqeLogin()

        })

    }

    override var userName: String = "张三"
    override var pwd: String = "123456"
    override var UIHandler: Handler = handler


    override fun onResponse(response: String) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onFailure(e: String?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onDestroy() {
        super.onDestroy()
        loginPresenter.cancleReq()
    }

}


3.模拟网络请求接口回调

class LoginPresenter{
    lateinit var iLoginInfoView:IloginInfoView

    constructor(iLoginInfoView:IloginInfoView){
        this.iLoginInfoView = iLoginInfoView

    }

    lateinit var loginReq:Call<WrapperRspEntity<User>>
    fun rqeLogin(){
        if(iLoginInfoView != null){
            loginReq = RetrofitManager.instance.createReq(LoginApi::class.java)
                    .loginReq(iLoginInfoView.userName, iLoginInfoView.pwd)
            loginReq .enqueue( object :Callback<WrapperRspEntity<User>>{
                override fun onFailure(call: Call<WrapperRspEntity<User>>?, t: Throwable?) {
                    iLoginInfoView.UIHandler.post(Runnable {iLoginInfoView.onFailure(t?.message)  })
                }

                override fun onResponse(call: Call<WrapperRspEntity<User>>?, response: Response<WrapperRspEntity<User>>?) {

                    iLoginInfoView.UIHandler.post(Runnable { response?.body() })
                }
            })
        }
    }

    fun cancleReq(){
        if(loginReq != null){
            //取消网络请求
            loginReq.cancel()
        }
    }

}


最后,我的retrfit使用很菜,还是不贴关于retrofit的东西,在网络请求返回数据应该有更好的方式进行回调(不考虑 RxJava,RxAndroid的情况),如果有更好的回调方式,非常希望大家给我留言..

刚开博客,加油.... 努力写到更好.










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值