用leancloud的登陆注册功能

将EditText和button美化。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="15dp" />
    <padding
        android:left="20dp"
        android:right="20dp"
        android:top="20dp"
        android:bottom="20dp"/>


    <solid android:color="#5a5aad"/>
</shape>
新建一个Drawable resource file将根节点改为shape。shape设置为矩形,corners设置圆角半径,padding设置内间距、solid设置背景颜色。放在drawable文件夹下。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/custom_button_unpress" android:state_pressed="false"></item>
    <item android:drawable="@drawable/custom_button_press" android:state_pressed="true"></item>
</selector>
为按钮设置未点击时的样式和点击时的样式。

新建个Drawable resource file将根节点改为shape。shape设置为矩形,corners设置圆角半径,padding设置内间距、solid设置背景颜色。

创建两个shape文件之后,再创建一个Drawable resource file根节点为selector。通过item设置点击时和未点击时分别为哪个shape文件的样式。



注册功能:

首先判断输入是否为空!为空时提示。

然后用leancloud来查询是否该用户已存在,已存在时提示。不为空时用leancloud添加。因为查询添加都是访问leancloud即访问网络。需要新建子线程。

注意:在查询中,如果该用户已存在我们通过定义一个标志flag(初始化为false),令flag为true。判断如果flag为true则return,令其不再往下执行注册代码。

在return把flag赋为false,是避免用户第一次注册时用户名已存在这时flag已经为true,第二次注册就还是true导致就算用户名可以注册还是注册不了。

new Thread(new Runnable() {
    @Override
    public void run() {
        AVQuery<AVObject> avQuery = new AVQuery<>("exam");
        avQuery.findInBackground(new FindCallback<AVObject>() {
            @Override
            public void done(List<AVObject> list, AVException e) {

                for (AVObject obj : list) {
                    String query_account = obj.getString("account");
                    if (query_account.equals(account)) {
                        Toast.makeText(getApplicationContext(), "该用户名已存在!", Toast.LENGTH_SHORT).show();
                        flag = true;
                        break;
                    }
                }
                if (flag) {
                    flag = false;
                    return;
                }
                addAccount();
            }
        });
    }
}).start();

public void addAccount(){
    AVObject avObject = new AVObject("exam");
    avObject.put("account",account);
    avObject.put("password", password);
    avObject.saveInBackground(new SaveCallback() {
        @Override
        public void done(AVException e) {
            if (e == null) {
                Toast.makeText(getApplicationContext(), "注册成功!可以登录了!", Toast.LENGTH_SHORT).show();
            } else
                Toast.makeText(getApplicationContext(), "注册失败!e:" + e, Toast.LENGTH_SHORT).show();
        }
    });
    startActivity(new Intent(RegisterActivity.this,LoginActivity.class));
    finish();
}


登陆功能:

首先判断输入是否为空!为空时提示。

然后用leancloud查询该账号密码是否匹配。不匹配时提示。匹配时跳转页面。同样是访问网络所以需要新建子线程。

这里同样初始化一个flag为false,如果账号密码匹配成功则令flag为true,这时则登陆成功跳转。否则用户名密码错误,弹出提示。

如果用户连续输入3次错误,则将EditText设置为不可获取焦点。初始化一个num为0,每输入错一次就自增,当num大于等于3时,设置为不可获取焦点。

new Thread(new Runnable() {
    @Override
    public void run() {
        AVQuery<AVObject> avQuery = new AVQuery<>("exam");
        avQuery.findInBackground(new FindCallback<AVObject>() {
            @Override
            public void done(List<AVObject> list, AVException e) {
                for (AVObject obj : list){
                    if (obj.getString("account").equals(account) && obj.getString("password").equals(password)){
                        flag = true;
                        break;
                    }
                }
                if (flag){
                    Toast.makeText(getApplicationContext(),"登陆成功!",Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(LoginActivity.this,WelcomeActivity.class));
                    finish();
                }else {
                    Toast.makeText(getApplicationContext(),"用户名密码错误!",Toast.LENGTH_SHORT).show();
                    num++;
                    if (num >= 3){
                        holder.et_account.setFocusable(false);
                        holder.et_password.setFocusable(false);
                        Toast.makeText(getApplicationContext(),"已限制登陆",Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}).start();



登陆功能里需要判断是否保存账号密码:分别为不保存、保存账号、保存密码账号。

if (holder.rb_no_rem.isChecked()){
    editor.remove("account");
    editor.remove("password");
    editor.commit();
}else if (holder.rb_rem_account.isChecked()){
    editor.putString("account",account);
    editor.commit();
}else if (holder.rb_rem_account_password.isChecked()){
    editor.putString("account",account);
    editor.putString("password",password);
    editor.commit();
}

这时页面登陆页面初始化的时候可以这样:

sp = getSharedPreferences("user", MODE_PRIVATE);
editor = sp.edit();
String a = sp.getString("account","");
String p = sp.getString("password", "");
holder.et_account.setText(a);
holder.et_password.setText(p);
if (TextUtils.isEmpty(a)){
    holder.rb_no_rem.setChecked(true);
}else if (!TextUtils.isEmpty(a) && !TextUtils.isEmpty(p)){
    holder.rb_rem_account_password.setChecked(true);
}else{
    holder.rb_rem_account.setChecked(true);
}
这样可以即给EditText赋值也可以设置RadioButton的默认选中状态。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值