【中级—,kotlin教程

Kotlin 中级篇(一):类(class) 一、类的声明 1、关键字 声明类的关键字为class 2、声明格式 class Test{ // 属性... ... // 构造函数 ... // 函数 ... // 内部类 ... ... } 其中: 当类没有结构体的时候,大括号可以省略。即: class Test 二、类的构造函数 在Kotlin中,允许有一个主构造函数和多个二级构造函数(辅助构造函数)。其中主构造函数是类头的一部分。 关键字或者构造函 阅读详情

public class User {
private String password;
private String username;

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@Override
public String toString() {
return "

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

User{" +
“password=’” + password + ‘’’ +
“, username=’” + username + ‘’’ +
‘}’;
}
}

封装了用户名、密码,方便数据传递。

②接口

public interface LoginModel {
void login(User user, OnLoginFinishedListener listener);
}

其中OnLoginFinishedListener 是presenter层的接口,方便实现回调presenter,通知presenter业务逻辑的返回结果,具体在presenter层介绍。

③接口实现类

public class LoginModelImpl implements LoginModel {
@Override
public void login(User user, final OnLoginFinishedListener listener) {
final String username = user.getUsername();
final String password = user.getPassword();
new Handler().postDelayed(new Runnable() {
@Override public void run() {
boolean error = false;
if (TextUtils.isEmpty(username)){
listener.onUsernameError();//model层里面回调listener
error = true;
}
if (TextUtils.isEmpty(password)){
listener.onPasswordError();
error = true;
}
if (!error){
listener.onSuccess();
}
}
}, 2000);
}
}

实现Model层逻辑:延时模拟登陆(2s),如果用户名或者密码为空则登陆失败,否则登陆成功。

2.View层

视图:将Modle层请求的数据呈现给用户。一般的视图都只是包含用户界面(UI),而不包含界面逻辑,界面逻辑由Presenter来实现。

从上图的包结构图中可以看出,View包含内容:

①接口,上面我们说过Presenter与View交互是通过接口。其中接口中方法的定义是根据Activity用户交互需要展示的控件确定的。

②接口实现类,将上述定义的接口中的方法在Activity中对应实现具体操作。

下面以代码的形式一一展开。

①接口

public interface LoginView {
//login是个耗时操作,我们需要给用户一个友好的提示,一般就是操作ProgressBar
void showProgress();

void hideProgress();
//login当然存在登录成功与失败的处理,失败给出提示
void setUsernameError();

void setPasswordError();
//login成功,也给个提示
void showSuccess();
}

上述5个方法都是presenter根据model层返回结果需要view执行的对应的操作。

②接口实现类

即对应的登录的Activity,需要实现LoginView接口。

public class LoginActivity extends AppCompatActivity implements LoginView, View.OnClickListener {
private ProgressBar progressBar;
private EditText username;
private EditText password;
private LoginPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
progressBar = (ProgressBar) findViewById(R.id.progress);
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
findViewById(R.id.button).setOnClickListener(this);
//创建一个presenter对象,当点击登录按钮时,让presenter去调用model层的login()方法,验证帐号密码
presenter = new LoginPresenterImpl(this);
}

@Override
protected void onDestroy() {
presenter.onDestroy();
super.onDestroy();
}

@Override
public void showProgress() {
progressBar.setVisibility(View.VISIBLE);
}

@Override
public void hideProgress() {
progressBar.setVisibility(View.GONE);
}

@Override
public void setUsernameError() {
username.setError(getString(R.string.username_error));
}

@Override
public void setPasswordError() {
password.setError(getString(R.string.password_error));
}

@Override
public void showSuccess() {
progressBar.setVisibility(View.GONE);
Toast.makeText(this,“login success”,Toast.LENGTH_SHORT).show();
}

@Override
public void onClick(View v) {
User user = new User();
user.setPassword(password.getText().toString());
user.setUsername(username.getText().toString());
presenter.validateCredentials(user);
}

}

View层实现Presenter层需要调用的控件操作,方便Presenter层根据Model层返回的结果进行操作View层进行对应的显示。

3.Presenter层

Presenter是用作Model和View之间交互的桥梁。
从上图的包结构图中可以看出,Presenter包含内容:

①接口,包含Presenter需要进行Model和View之间交互逻辑的接口,以及上面提到的Model层数据请求完成后回调的接口。

②接口实现类,即实现具体的Presenter类逻辑。

下面以代码的形式一一展开。

①接口

public interface OnLoginFinishedListener {
void onUsernameError();

void onPasswordError();

void onSuccess();
}

当Model层得到请求的结果,需要回调Presenter层,让Presenter层调用View层的接口方法。

public interface LoginPresenter {
void validateCredentials(User user);

void onDestroy();
}

登陆的Presenter 的接口,实现类为LoginPresenterImpl,完成登陆的验证,以及销毁当前view。

②接口实现类

public class LoginPresenterImpl implements LoginPresenter, OnLoginFinishedListener {
private LoginView loginView;
private LoginModel loginModel;

public LoginPresenterImpl(LoginView loginView) {
this.loginView = loginView;
this.loginModel = new LoginModelImpl();
}

@Override
public void validateCredentials(User user) {
if (loginView != null) {
loginView.showProgress();
}

loginModel.login(user, this);
}

@Override
public void onDestroy() {
loginView = null;
}

@Override
public void onUsernameError() {
if (loginView != null) {
loginView.setUsernameError();
loginView.hideProgress();
}
}

@Override
public void onPasswordError() {
if (loginView != null) {
loginView.setPasswordError();

Kotlin语言教程 Kotlin是一种在Java虚拟机(JVM)上运行的编程语言,也可以被编译成JavaScript等其他格式。它由JetBrains开发,旨在与Java兼容并提供更简洁、高效的语法。这只是Kotlin语言的一个初步教程,随着学习的深入,还可以探索更多高级特性,如协程、反射等。 阅读详情

相关推荐

TMS320F28388D 学习笔记2 高精度PWM (HRPWM)

HRPWM的学习记录。

whyorwhnt的专栏 9536

阿里P7大佬教你Kotlin协程实现原理:挂起与恢复

P7大佬教你Kotlin协程实现原理:挂起与恢复

Android_XG的博客 703

FPGA新手必看:XC7Z020最小系统搭建全攻略(附原理图解析)

本文为FPGA新手提供了XC7Z020最小系统搭建的完整实战指南。文章详细解析了电源架构、时钟复位、配置调试等关键硬件电路设计,并重点剖析了外围电路与端口引脚的连接要点及常见陷阱,帮助读者从零开始构建稳定可靠的开发平台。

weixin_29189377的博客 360

Kotlin 以3秒后退出应用为例,用handler+postDelayed() 实现倒计时

1、初始化三个属性 private var mTime = 3 private var mHandler: Handler = Handler() private val mRunnable: Runnable = object : Runnable { override fun run() { // TODO: 倒计时逻辑 ...

ihoudf 5800

AI虚拟人物 数字人直播,不用出镜,不用露脸的直播方式(附教程 软件)

我们先来看一组数据,这是我通过蝉妈妈查到的某位虚拟主播的一个带货数据,粉丝还不到 3000 人,每次直播 1 到 4 个小时,30天的总销量达到了1200单,15天,总销售额 2 万,可能相对来说客单价还是比较低,最关键的是才直播了 6 场,如果说他能够一个月直播 20 天,每天花 4个小时去直播,当个副业来做,就可以达到最起码月入 3 万的一个收入水平,我个人觉得是非常的不错的。大家把商品图片放在背景,只要场景设置的不错,场景和产品的关联度高,直播的时候挂上购买链接也会有一定的成交。

. 7万+

雷电模拟器+Auto.js避坑指南:用桥接模式解决PC与模拟器连接超时问题

本文详细解析了雷电模拟器与Auto.js联调中的桥接模式应用,解决PC与模拟器连接超时问题。通过桥接模式配置、高频故障排查及多开环境下的高阶配置,提升开发效率与稳定性,特别适合需要稳定网络连接的Auto.js开发者。

weixin_28836989的博客 634

[kotlin]处理延时操作

在 Kotlin 中处理延迟操作可以通过多种方式实现,每种方式都适用于不同的场景和需求。

Gamin 3635

电流互感器的使用分析

有关电流互感器使用的注意事项,回头再看,耳目一新。

qq_46757048的博客 2万+

Kotlin协程到底是怎么切换线程的?你是否知晓?

好文推荐: 作者:RicardoMJiang 前言 之前对协程做了一个简单的介绍,回答了协程到底是什么的问题,感兴趣的同学可以了解下:【带着问题学】协程到底是什么? 通过上文,我们了解了以下内容 1.kotlin协程本质上对线程池的封装 2.kotlin协程可以用同步方式写异步代码,自动实现对线程切换的管理 这就引出了本文的主要内容,kotlin协程到底是怎么切换线程的? 具体内容如下: 1. 前置知识 1.1 CoroutineScope到底是什么? CoroutineScope即协程运行的作用域,.

鸿蒙开发知识记录 4286

STM32 USB键盘实现指南

在STM32上实现键盘功能可以通过USB HID(人机接口设备)协议来实现,使STM32设备能被计算机识别为标准键盘。通过上述步骤,您可以在STM32上实现一个功能完整的USB键盘。关键点包括:正确配置USB HID设备实现键盘矩阵扫描处理按键事件并生成HID报告优化按键响应和消抖处理添加额外功能如宏键和LED反馈这个实现可以作为基础,进一步扩展为游戏键盘、宏键盘或特殊输入设备。

suny8的专栏 973

【Android Performance】Android CPU绑核实战:从taskset到cpuset的完整调优指南

本文系统讲解Android系统中的CPU绑核(CPU Affinity)技术,涵盖用户空间的taskset命令行绑核、内核cpuset分组机制的原理与操作、进程级与线程级绑核的代码实现、以及中断绑核的底层方法。文中深入拆解CPU亲和性掩码的计算规则、各cpuset分组的默认策略差异、绑核后的验证手段及常见踩坑场景,并配有多项实操命令与C代码示例。适合从事Android系统性能调优、进程调度优化的开发者阅读。

weixin_44081096的博客 1312

Kotlin中实现简单的倒计时按钮

在kotlin中实现最简单的有倒计时功能的按钮,诸如注册时需要点击获取验证码,点击后直接变成倒计时状态。 /** * 创建时间: 2018/12/26 0026 * 创建人:ldm * 功能描述: */ class CountdownButton(mContext: Context, attrSet: AttributeSet) : Button(mContext, attrSet) { ...

true100的专栏 9772

数据挖掘实战-基于情感分析+网络语义分析对泾阳茯茶用户评论进行文本分析

本实验数据集来源于京东商城,使用Python爬虫获取泾阳茯茶商品的用户评论,共计3416条数据,字段有用户ID、用户昵称、IP属地、评论时间、评分、评论内容,共计6个字段信息。'''作者:艾派森csdn主页:https://blog.youkuaiyun.com/m0_64336780时间:2024/5/28'''# 导包import csv# 获取评论q=0.01',q=0.9,en;b_avif=1;b_dw=1412;b_dh=650;areaId=27;

m0_64336780的博客 1万+

Kotlin教程(九)泛型

写在开头:本人打算开始写一个Kotlin系列的教程,一是使自己记忆和理解的更加深刻,二是可以分享给同样想学习Kotlin的同学。系列文章的知识点会以《Kotlin实战》这本书中顺序编写,在将书中知识点展示出来同时,我也会添加对应的Java代码用于对比学习和更好的理解。

ZL_1618的博客 1908

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Kotlin 中级篇(四):继承类

一、面向对象的特征 面向对象的三大特征:封装、继承、多态 由于面向对象的三大特征太过于普通,而且这并不是Kotlin中特有的知识。在这里就不多做描述。 二、Kotlin继承类 在Kotlin中,继承这个特性除了定义关键字,以及所有的父类和Java语言不通之外,其他的其实无太大的差别。不过既然写到了这里,还是从始至终的写完这个特性,如果您有Java的基础,您可以当复习一遍。 2.1、超类(Any) 在Kotlin中,说有的类都是继承与Any类,这是这个没有父类型的类。即当我们定义各类时,

weixin_55362248的博客 434

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Kotlin 资源大全 - 学 Kotlin 看这一篇教程就够了

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!上面分享的字节跳动公司2020年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。就先写到这,码字不易,写的很片面不好之处敬请指出,如果觉得有参考价值的朋友也可以关注一下我。

2401_84167125的博客 975

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BeginnersBook Kotlin 教程

来源:ApacheCN BeginnersBook 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维...

龙哥盟 3万+

Kotlin入门教程——目录索引

Kotlin是谷歌官方认可的Android开发语言,即将发布的Android Studio 3.0版本也会开始内置Kotlin,所以未来在App开发中Kotlin取代Java是大势所趋,就像当初Android Studio取代Eclipse成为App开发工具一样。 下面分章节列出各篇Kotlin教程的索引地址,方便大家查阅。 Kotlin入门教程目录 第一章 环境搭建Kotlin入门(1)...

aqi00的博客 1万+

Kotlin教程

概述 Kotlin的历史 Kotlin由世界上IDE做得最好的公司JetBrains开发,2010年面向大众推出,是一门年轻的、现代化的编程语言。Kotlin这个名字来自于JetBrains公司附近的一个岛屿,叫科特林岛。估计这帮人没事就去岛上游游泳,钓钓鱼,泡泡妹纸,顺便写写代码;慢慢就爱上了这个岛,用了它的名字。 JetBrains的IDE做的那么好,当然最懂开发者的尿性,它发明的语言就是以解...

weixin_34406796的博客 576

Kotlin教程,从入门到精通

前言 Kotlin现在已经更新至1.3. 后续,也将以1.3版本进行讲解。 围绕 What(是什么)、How(怎么用)、Difference(与java的区别)、Intent(意图是什么)四个方面来阐述。 产物:Kotlin整理后的Xmind(更新在github上) 目录结构 [基础篇] 基本类型 ...

王学明 2101

Kotlin从入门到『放弃』系列 视频教程

随着Kotlin越来越成熟稳定,我已经开始在生产环境中使用它。考虑到目前国内资料较少,近期我开始筹划录制一套视频教程,并以此抛砖引玉,让 Kotlin 在国内火起来。 个人水平有限,不足之处欢迎大家发邮件到 bennyhuo@println.net,谢谢大家! 发布计划 关注微信公众号:Kotlin, 获取最新视频更新动态 从10月初开始,每期视频控制在10-20分

ruglcc's blog 1万+

Kotlin教程:Kotlin入门

正如我在文章“ 什么是Kotlin? Java替代方案解释说 ,“ Kotlin是一种通用的,开源的,静态类型化的“实用”编程语言,结合了面向对象和功能性编程功能。 您可以使用Kotlin为Java虚拟机(JVM),Android,浏览器以及MacOS,Linux,Windows,iOS,WebAssembly和Android上的本机应用程序构建应用程序。 Kotlin由JetBrains创建...

cxu0262的博客 2667

Kotlin学习教程(一)

class) {如果你没有指定它的返回值,它就会返回Unit与Java中的void类似,但是Unit是一个真正的对象。Unit可以省略,return a} else {return b我们可以给参数指定一个默认值使得它们变得可选,这是非常有帮助的。这里有一个例子,在Activity中创建了一个函数用来Toast上面代码中第二个参数length指定了一个默认值。get set。

yundashi168.com 2440

ZetCode Kotlin 教程

来源:ApacheCN ZetCode 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科) ...

龙哥盟 3万+
上一篇: 【View系列】View事件分发源码探索,安卓常见面试题知乎
下一篇: 【全网首发】,2021最新中高阶Android面试题总结
flunsna
博客等级 码龄5年 10粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值