前言
前段时间google宣布Kotlin成为Android开发第一语言,作为一个Android 程序猿,必须得跟上脚步,正好这几天刚完成新项目,今天就用Kotlin实现简单的登录功能
1.创建项目
使用android studio 3.0创建一个新项目,在app.build.gradle中添加强大的'kotlin-android-extensions',最终build.gradle的plugin如下
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
2.使用网络框架
网络框架我们使用okHttp封装框架
compile 'com.zhy:okhttputils:2.0.0'
3.代码实现
1.Bean文件
创建名为Responses(随便写) 的Kotlin文件
在Responses中添加class 作为bean使用
最终能给你代码如下:
class Responses() {
class Login(val code: String, val message: String, val userinfo: UserInfo, val token: String)
class UserInfo(val headimg: String, val token: String, val userid: String, val username: String)
}
2.布局文件,布局文件就是两个editTexct加上一个Button就行,这里就不贴代码了
3.登录逻辑
给按钮设置点击事件
//login_btn是xml布局中的登录按钮id
//使用kotlin-android-extensions可以直接使用id调用
//不需要再像java一样findViewById();
login_btn.setOnClickListener {
//获取登录手机号
val phone = phone_edt.text.toString().trim()
//获取密码输入框的值并且通过Md5进行加密
val pwd = MD5Util.getMD5(pwd_edt.text.toString().trim())
//登录方法的具体实现
login(phone, pwd)
}
Kotlin的Login方法实现
fun login(phone: String, pwd: String) {
//使用okhtttputils将phone和password发送给服务器
OkHttpUtils.post().url(LoginURL).addParams("phone", phone)
.addParams("password", pwd).build().execute(object : StringCallback() {
//成功回调
override fun onResponse(response: String?) {
Log.e("清风", "---response---" + response)
var model = GsonUtils.jsonToBean<Responses.Login>(response, Responses.Login::class.java)
//登录成功
if (model.code == "success") {
startActivity(Intent(this@LoginActivity, MainActivity::class.java))
}
}
//失败回调
override fun onError(p0: Request?, e: Exception?) {
//请求失败处理回调信息
Log.e("清风", "---error---" + e!!.message)
}
})
}
登陆逻辑的java实现:
/**
* 登录逻辑
*
* @param phone
* @param password 请求成功,显示提示信息,保存用户信息,并关闭页面
*/
private void Login(final String phone, String password) {
showProgressDialog();
String url = ConstantUtil.LoginURL;
OkHttpUtils.post().url(url).addParams("phone", phone)
.addParams("password", password).build().execute(new StringCallback() {
@Override
public void onError(Request request, Exception e) {
dismissProgressDialog();
Log.e("cs", "login_eeror===" + e.getMessage());
}
@Override
public void onResponse(String response) {
dismissProgressDialog();
// Log.e("cs", "login_response===" + response);
//登录成功,跳转到mainActivity,关闭当前页
LoginModel model = GsonUtils.jsonToBean(response, LoginModel.class);
if ("success".equals(model.getCode())) {
//显示提示信息
UIUtils.showToastSafe(model.getMessage());
// Log.e("cs", "------token*--" + model.getToken());
//关闭登录页面
finish();
}
}
});
}
java实现的bean文件
public class LoginModel {
private String code;
private String message;
private UserinfoBean userinfo;
private String token;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public UserinfoBean getUserinfo() {
return userinfo;
}
public void setUserinfo(UserinfoBean userinfo) {
this.userinfo = userinfo;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public static class UserinfoBean {
/**
* userid : ccfddbd51a4046fba0bdca2d79afddb7
* username : 凤飞飞
*/
private String userid;
private String username;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}