注册和登陆大多都是一些用户名和密码的验证,所以放在一起写,注册代码:

String account = accountEdit.getText().toString().trim();
String password = passwordEdit.getText().toString().trim();
String yanzheng = yanzhengma.getText().toString().trim();
if(account.equals("")||password.equals("")||yanzheng.equals("")) {
if (account.equals(""))
Toast.makeText(this, "请填写用户名!", Toast.LENGTH_SHORT).show();
else if(password.equals(""))
Toast.makeText(this, "请填写用户密码!", Toast.LENGTH_SHORT).show();
else if(yanzheng.equals(""))
Toast.makeText(this, "请点击获取验证码!", Toast.LENGTH_SHORT).show();
} else if(a != Integer.valueOf(yanzheng)){
Toast.makeText(this, "验证码输入错误!", Toast.LENGTH_SHORT).show();
} else if (account.length() > 6 || account.length() < 2) {
Toast.makeText(this, "请输入2-6位用户名!", Toast.LENGTH_SHORT).show();
accountEdit.setText("");
} else if (password.length() > 8 || password.length() < 4) {
Toast.makeText(this, "请输入4-8位密码!", Toast.LENGTH_SHORT).show();
passwordEdit.setText("");
} else {
//存储
BmobUser us = new BmobUser();
us.setUsername(account);
us.setPassword(password);
//检查网络连接
if(!NetWork.isNetConnection(this)){
Toast.makeText(this,"无网络连接!",Toast.LENGTH_SHORT).show();
return;
}else{
us.signUp(new SaveListener() {
@Override
public void done(BmobUser re, BmobException e) {
if(e==null){
Toast.makeText(Register.this, "注册成功!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(Register.this, "用户名已存在,请直接登录!", Toast.LENGTH_SHORT).show();
}
}
});
//跳转到登录界面
Intent intent2 = new Intent(Register.this,login.class);
intent2.putExtra("account", account);
intent2.putExtra("password", password);
startActivity(intent2);
finish();
}
}

对于用户名和密码的一些判断,使用signUp来进行用户注册,注册成功后会利用intent传递用户参数给登录界面。

下面是登陆界面的初始化代码,本文使用LitePal进行本地数据库存储用户信息,并将用户的用户名和密码使用SharedPreferences文件存储,这里可以使用MD5进行加密,但我没写:

//数据库初始化
LitePal.initialize(this);
LitePal.getDatabase();
// 注册订阅者
EventBus.getDefault().register(this);
//初始化bmob
Bmob.initialize(this, "d4dafd6854343ba7b42a4c347757c7e6");
BmobIM.init(this);
BmobIM.registerDefaultMessageHandler(new ImMessageHandler());
//TODO 集成:1.4、初始化数据服务SDK、初始化设备信息并启动推送服务
// 使用推送服务时的初始化操作
BmobInstallationManager.getInstance().initialize(new InstallationListener() {
@Override
public void done(BmobInstallation bmobInstallation, BmobException e) {}});
// 启动推送服务
BmobPush.startWork(this);

接下来判断复选框(是否记住密码)以及是否有参数传递过来:

//判断是否选中
if(isRemember){
String account = pref.getString("account","");
String password = pref.getString("password","");
accountEdit.setText(account);
passwordEdit.setText(password);
rememberPass.setChecked(true);
}
try {
Intent intent0 = getIntent();
String acc = intent0.getStringExtra("account");
String pass = intent0.getStringExtra("password");
//判断是否记住
if(isRemember) {
String acc1 = accountEdit.getText().toString().trim();
String pass1 = passwordEdit.getText().toString().trim();
editor = pref.edit();
if(rememberPass.isChecked()){
editor.putBoolean("remember",true);
editor.putString("account",acc1);
editor.putString("password",pass1);
} else {
editor.clear();
}
editor.apply();
}
//判断传递值是否为空
if(!(acc.equals("")&&pass.equals(""))){
accountEdit.setText(acc);
passwordEdit.setText(pass);
}
}catch (Exception e) {
Log.i(TAG, "onCreate: "+e);
}

当用户点击登陆按钮,调用login方法判断用户是否存在于服务器中:

//检查网络连接
if(!NetWork.isNetConnection(this)){
Toast.makeText(this,"无网络连接!",Toast.LENGTH_SHORT).show();
return;
}else{
// 登录验证
us.login(new SaveListener() {
@Override
public void done(BmobUser bmobUser, BmobException e) {
if(e==null){
Intent intent1 = new Intent(login.this,MainActivity.class);
startActivity(intent1);
finish();
}else{
Toast.makeText(login.this,"用户名或密码错误,请重新登陆!",Toast.LENGTH_SHORT).show();
}
}
});
}

用户登录成功之后就会跳转到MainActivity了。

即时聊天APP(三) - 注册和登陆的更多相关文章

  1. 即时聊天APP(一)

    最新写了一个即时聊天的安卓Demo,是基于Bmob后端开发的app,由于Bmob有较大局限性,因此,我并没有按照开发文档来进行开发,只是简单写了一个基本的文字聊天,以后有时间我会自己写一个带服务端的即 ...

  2. 即时聊天APP(二) - MainActivity

    主活动包含三个Fragment,分别是会话.联系人和设置,初始布局隐藏所有碎片,然后把应该显示的显示出来: //隐藏所有Fragment private void hideAll(){ Fragmen ...

  3. 即时聊天APP(六) - 消息的接收以及EventBus使用

    通常我们在接收消息的时候会有声音和震动的提示,因此我也加了代码达到这样的效果,这就要用到EventBus了,当然这里我也用到了自定义的广播,所以首先在Mainfests文件中加入以下代码: <r ...

  4. 即时聊天APP(五) - 聊天界面

    设置界面没什么好说的,无非也就是加了个对话框来二次提醒用户,现在来讲讲聊天界面. 聊天界面初始化时会得到一个参数,就是对方的id,并设置在标题栏的位置,此界面也是使用RecyclerView来展示聊天 ...

  5. 即时聊天APP(四) - 联系人和会话

    联系人和会话界面使用的是RecyclerView进行滑动显示,并将好友列表存储至数据库,以供下次登录时使用,RecyclerView在后面我会详细介绍,这里略过. 联系人初始化时读取数据库并展示: / ...

  6. web 直播&即时聊天------阿里云、融云(三)

    经过前面的知识,基本已经把聊天室的功能搞定了,剩下的就是直播的问题了... 一如既往,阿里云的web demo也是少的可怜,只有一个web播放器(Prismplayer),所以这里主要就此播放器踩的坑 ...

  7. Node.js + Web Socket 打造即时聊天程序嗨聊

    前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...

  8. 开发一款即时通讯App,从这几步开始

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云视频发表于云+社区专栏 关注公众号"腾讯云视频",一键获取 技术干货 | 优惠活动 | 视频方案 " ...

  9. IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯(三)

    IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯(三) 后台服务用户与认证 新建一个空的.net core web项目Demo.Chat,端口配置为 ...

随机推荐

  1. CentOS 安装 JDK 三种形式详细总结

    一.下载 JDK   点击下载:jdk-8u211-linux-x64.tar.gz   根据需要选择对应版本和位数,并将文件放入CentOS中的相关目录中,以 /java/jdk 目录为例,执行 m ...

  2. 《白帽子讲web安全》——吴瀚清 阅读笔记

    浏览器安全 同源策略:浏览器的同源策略限制了不同来源的“document”或脚本,对当前的“document”读取或设置某些属性.是浏览器安全的基础,即限制不同域的网址脚本交互     <scr ...

  3. 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级

    标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...

  4. PyQt编写Python GUI程序,简易示例

    https://blog.csdn.net/qq_41841569/article/details/81014207

  5. 【Fishing Master HDU - 6709 】【贪心】

    题意分析 题意:题目给出n条鱼,以及捕一条鱼所用的时间k,并给出煮每一条鱼的时间,问抓完并煮完所有鱼的最短时间. 附题目链接 思路: 1.捕第一条鱼的时间是不可避免的,煮每条鱼的时间也是不可避免的,这 ...

  6. nuget cli常用命令简介

    起因:使用nuget,但是部分同事用的mac,不能用vs的包管理器查看私有nuget库里面的包,所以,就总结了几个常用的 nuget cli 命令,方便全平台使用nuget 废话不多,直入主题 准备: ...

  7. Codeforces 1008C

    题意略. 思路: 其实我们没有必要关注每个数字的位置,我们只要把大的数字放在小的数字上就可以了,这样它的位置必然会发生变换. 在变换时,这个替换的序列越长越好,每个序列对答案的贡献就是该序列的长度 - ...

  8. flutter无线调试与打包

    1.WIFI连接设备 设备打开开发者选项 -> 点击WIFI调试 ->  项目目录下输入终端命令: adb connect   设备ip地址:[端口号(一般是5555)] 2.apk打包 ...

  9. zstu19一月月赛 duxing201606的原味鸡树

    duxing201606的原味鸡树 题意: 给定一颗有n(n<=1e9)个节点的完全二叉树,1e5次询问,问某个节点有几个子节点. 思路: 自己在月赛上没有思路,问了zfq才知道. 设两个指标, ...

  10. 2014 西安 The Problem Needs 3D Arrays

    The Problem Needs 3D Arrays 题意:给你n个数, 然后1-n的数, 然后要求按顺序选出m个数, 求 逆序数/m 个数的 最大值是多少. 题解:裸的最大密度子图.逆序的2个数建 ...