03Kotlin登录MVP模式搭建
Posted 清风百草
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03Kotlin登录MVP模式搭建相关的知识,希望对你有一定的参考价值。
(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)好好活就是做有意义的事情.
(8)亡羊补牢,为时未晚
(9)科技领域,没有捷径与投机取巧。
(10)有实力,一年365天都是应聘的旺季,没实力,天天都是应聘的淡季。
(11)基础不牢,地动天摇
(12)写博客初心:成长自己,辅助他人。当某一天离开人世,希望博客中的思想还能帮人指引方向.
(13)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
Kotlin登录MVP模式搭建
Kotlin体系文档
文章目录
1.MVP模式搭建
1.1MVP接口
1.1.1Model层接口
/**
* @author XiongJie
* @version appVer
* @Package com.gdc.kotlinproject.modules.login.interfaces
* @file
* @Description:Module层
* @date 2021-5-9 09:44
* @since appVer
*/
interface LoginModule {
/**
* 1.取消请求动作
*/
fun cancelRequest()
/**
* 1.登录
* (1)接口回调:把data结果,给Presenter层
*/
fun login(
context : Context,
username : String,
password:String,
onLoginListener:LoginPresenter.OnLoginListener
)
}
1.1.2Presenter层接口
/**
* @author XiongJie
* @version appVer
* @Package com.gdc.kotlinproject.modules.login.interfaces
* @file
* @Description:Presenter层
* @date 2021-5-9 09:41
* @since appVer
*/
interface LoginPresenter {
/**
* 1.登录
* (1)context是为了给网络模型用的
*/
fun loginAction(context : Context,username:String,password : String)
/**
* 监听接口回调
*/
interface OnLoginListener{
fun loginSucess(loginBean: LoginResponse?)
fun loginFailure(errorMsg : String ?)
}
}
1.1.3View层接口
/**
* @author XiongJie
* @version appVer
* @Package com.gdc.kotlinproject.modules.login.interfaces
* @file
* @Description:
* 1.MVP模式View抽象层
* @date 2021-5-8 13:12
* @since appVer
*/
interface LoginView {
/**
* 1.把结果显示到Activity / Fragment
* ? 允许为null
*/
fun loginSucess(loginBean: LoginResponse ?)
/**
* 2.失败
*/
fun loginFailure(errorMsg : String ?)
}
1.2MVP接口实现
1.2.1Model层接口实现
/**
* @author XiongJie
* @version appVer
* @Package com.gdc.kotlinproject.modules.login
* @file
* @Description:Model的实现层
* @date 2021-5-9 09:55
* @since appVer
*/
class LoginModelImpl :LoginModule{
override fun cancelRequest() {
}
override fun login(
context: Context,
username: String,
password: String,
onLoginListener: LoginPresenter.OnLoginListener) {
APIClient.instance.instanceRetrofit(WanandroidAPI::class.java)
//1.1全部都是RxJava知识了
//1.1.1创建被观察者,经过此步骤会返回一个Observable对象,它是RxJava的起点
//1.1.2将LoginResponseWrapper丢给RxJava慢慢的往传递,直到传给UI界面控件
.loginAction(username, password)
//1.1.3因为请求与响应是耗时操作,所以将其放到异步线程中执行。
.subscribeOn(Schedulers.io())
//1.1.4将下面更新UI的操作,分配到main线程中执行
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : APIResponse<LoginResponse>(context) {
override fun success(data: LoginResponse?) {
Log.i(Flag.TAG, "success:$data")
//1.成功
onLoginListener.loginSucess(data)
}
override fun failure(errorMsg: String?) {
Log.i(Flag.TAG, "success:$errorMsg")
//2.失败
onLoginListener.loginFailure(errorMsg)
}
})
}
}
1.2.2Presenter层接口实现
/**
* @author XiongJie
* @version appVer
* @Package com.gdc.kotlinproject.modules.login
* @file
* @Description:Presenter层实现
* (1)私有构造方法
* private constructor(var loginView:LoginView)
*
*
* @date 2021-5-9 09:54
* @since appVer
*/
class LoginPresenterImpl constructor(var loginView:LoginView) : LoginPresenter,LoginPresenter.OnLoginListener{
private val loginModel : LoginModelImpl = LoginModelImpl()
/**
* TODO
* (1)输入校验
* (2)其他事项
* (3)调用Model层
* (4)需要Model层请求服务器
* (5)需要View层去更新tivity/Fragment
*/
override fun loginAction(context: Context, username: String, password: String) {
loginModel.login(context,username,password,this)
}
/**
* 1.接收Model的结果集
* (1)使用接口的回调实现
* (2)LoginPresenter.OnLoginListener
*/
override fun loginSucess(loginBean: LoginResponse?) {
loginView.loginSucess(loginBean)
}
override fun loginFailure(errorMsg: String?) {
loginView.loginFailure(errorMsg)
}
}
1.2.3View层接口实现
/**
* 1.登录界面
* (1)View层,只需要关注P层,实现Presenter层
*/
class LoginActivity : AppCompatActivity() ,LoginView{
/**
* 1.P层接口
* (1)懒加载,即先不实例化
*/
lateinit var p : LoginPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
user_login_bt.setOnClickListener(onClickListener)
p = LoginPresenterImpl(this);
}
/**
* 1.kotlin与java的无缝交互
* 1.1view.id不需要写view.getId()或view.setId()是因为Kotlin中自动判断调用哪个方法
* 1.1.1id的值由内部根据"="知道你是调用get还是set方法
* 1.1.2WanAndroidAPI::class.java 对应 WanAndroidAPI.class
* 1.1.3val api = APIClient.instance.instanceRetrofit(WanAndroidAPI::class.java)
*/
private val onClickListener = View.OnClickListener { view ->
when (view.id) {
//1.登录
R.id.user_login_bt -> {
val userName = user_phone_et.text.toString()
val userPwd = user_password_et.text.toString()
Log.d(Flag.TAG, "userName:$userName,userPwd:$userPwd")
//1.1调用Presenter层实现业务
p.loginAction(this@LoginActivity,userName,userPwd)
}
}
}
/**
* 响应
*/
override fun loginSucess(loginBean: LoginResponse?) {
Toast.makeText(this@LoginActivity, "登录成功", Toast.LENGTH_SHORT).show()
}
override fun loginFailure(errorMsg: String?) {
Toast.makeText(this@LoginActivity, "登录失败", Toast.LENGTH_SHORT).show()
}
}
2.打赏鼓励
感谢您的细心阅读,您的鼓励是我写作的不竭动力!!!
2.1微信打赏
2.2支付宝打赏
以上是关于03Kotlin登录MVP模式搭建的主要内容,如果未能解决你的问题,请参考以下文章