zoukankan      html  css  js  c++  java
  • 即时聊天APP(三)

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

    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了。

  • 相关阅读:
    ASP.NET 使用 X509Certificate2 系统找不到指定的文件
    SQL2000中TOP后不能使用变量
    补丁生成与应用工具 V1.5.4
    检测到通信错误。正在使用的通信协议:"TCP/IP"。正在使用的通信API:"SOCKETS"。检测到错误的位置:""。检测到错误的通信函数:"gethostbyname"。协议特定的错误代码:"*"、"11004"、"*"。 SQLST
    CLR 无法从 COM 上下文 0x1a2740 转换为 COM 上下文 0x1a28b0,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作
    Chart 控件 for vs2008的安装
    SqlServer孤立用户解决——"因为该用户存在对象,所以不能删除该用户。"
    函数 replace 的参数 1 的数据类型 text 无效。
    安装SqlServer2000出现"有挂起的操作"提示的解决
    DB2、ORACLE SQL写法的主要区别
  • 原文地址:https://www.cnblogs.com/zqm-sau/p/10331932.html
Copyright © 2011-2022 走看看