android 基于Bmob的聊天——用户管理——注册

Bmob提供了一个专门的用户类——BmobUser来自动处理用户账户管理所需的功能。

属性
BmobUser除了从BmobObject继承的属性外,还有几个特定的属性:
username: 用户的用户名(必需)。
password: 用户的密码(必需)。
email: 用户的电子邮件地址(可选)。
emailVerified:邮箱认证状态(可选)。
mobilePhoneNumber:手机号码(可选)。
mobilePhoneNumberVerified:手机号码的认证状态(可选)。

扩展用户类
很多时候,你的用户表还会有很多其他字段,如性别、年龄、头像等。那么,你需要对BmobUser类进行扩展,添加一些新的属性,我的扩张用户类如下所示:

public class MyUser extends BmobUser {
    private static final long serialVersionUID = 1L;
    private boolean loginState;         //登录状态
    private boolean sex;                //false - male,  true - female
    private String nick_URL_NET;        //头像,将图像上传至服务器后会返回URL 保存
    private String nick_URL_LOCAL;      //头像,将图像保存至本地   路径
    public long time;                   //记录最近一次登录时间,自动登录保存1个星期

    public boolean isLoginState() {
        return loginState;
    }
    public void setLoginState(boolean loginState) {
        this.loginState = loginState;
    }
    public boolean isSex() {
        return sex;
    }
    public void setSex(boolean sex) {
        this.sex = sex;
    }
    public String getNick_URL_NET() {
        return nick_URL_NET;
    }
    public void setNick_URL_NET(String nick_URL_NET) {
        this.nick_URL_NET = nick_URL_NET;
    }
    public String getNick_URL_LOCAL() {
        return nick_URL_LOCAL;
    }
    public void setNick_URL_LOCAL(String nick_URL_LOCAL) {
        this.nick_URL_LOCAL = nick_URL_LOCAL;
    }
    public MyUser() {
        super();
    }
    public long getTime() {
        return time;
    }
    public void setTime(long time) {
        this.time = time;
    }
    @Override
    public String toString() {
        return "MyUser [loginState=" + loginState + ", sex=" + sex
                + ", nick_URL_NET=" + nick_URL_NET + ", nick_URL_LOCAL="
                + nick_URL_LOCAL + ", time=" + time + "]";
    }

创建用户:
MyUser myUser = new MyUser();
注册用户:
这里写图片描述
这时分两种情况:用户有头像设置与没有头像设置;
若用户有对头像进行设置,在注册时先将头像文件上传至服务器,并将返回的服务器地址保存,再注册;而没有进行投向设置则直接注册,代码如下:

PublicData.bu.setSex(rb_female.isChecked() == true ? true:false);
        PublicData.bu.setUsername(name);
        PublicData.bu.setPassword(password);

        final ProgressDialog progress = new ProgressDialog(this);
        progress.setMessage("正在注册...");
        progress.setCanceledOnTouchOutside(false);
        progress.show();
        //如果修改了头像
        if(change_nick){
            change_nick = false;
            //将头像上传
            String tmpPathImg = outImgPath+".jpg";
            tmpNike = new File(tmpPathImg);
            bmobFile = new BmobFile(tmpNike);

            bmobFile.uploadblock(this, new UploadFileListener() {

                @Override
                public void onSuccess() {
                    // TODO Auto-generated method stub
                    String url = bmobFile.getFileUrl(RegsiterActivity.this);
                    Toast.makeText(getApplicationContext(), "上传文件成功:" + url, Toast.LENGTH_LONG).show();
                    PublicData.bu.setNick_URL_NET(url);
                    PublicData.bu.setNick_URL_LOCAL(outputUri.getPath());
                    UserInfo userInfo = new UserInfo(PublicData.bu.getUsername(),bmobFile,url);
                    saveInfo(userInfo);
                    register(PublicData.bu,progress);
                }

                @Override
                public void onProgress(Integer arg0) {
                    // TODO Auto-generated method stub
                }

                @Override
                public void onFailure(int arg0, String arg1) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), "上传文件失败:" + arg1, Toast.LENGTH_LONG).show();
                    cancelDialog(progress);
                }
            });
        }else{
            PublicData.bu.setNick_URL_NET(PublicData.noNike);
            PublicData.bu.setNick_URL_LOCAL(null);
            register(PublicData.bu,progress);
        }

private void register(final MyUser bu,final ProgressDialog progress) {
        bu.signUp(getApplicationContext(), new SaveListener() {

            @Override
            public void onSuccess() {
                Toast.makeText(getApplicationContext(), "注册成功!", Toast.LENGTH_LONG).show();
                progress.dismiss();
                PublicData.loginState = true;
                bu.setLoginState(true);
                bu.setTime(System.currentTimeMillis());
                UserSharePreference sharePreference = new UserSharePreference(getApplicationContext());
                sharePreference.saveMessage(bu);
                release();
                if(tmpNike.exists()){
                    tmpNike.delete();
                }
                finish();
            }

            @Override
            public void onFailure(int arg0, String arg1) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "注册失败:"+arg1, Toast.LENGTH_LONG).show();
                progress.dismiss();
                bu.setLoginState(false);
            }
        });
    }
/**
     * 将用户信息上传至服务器,为了测试在服务器新建表,可不用此操作
     * */
protected void saveInfo(final UserInfo userInfo) {
        userInfo.save(getApplicationContext(), new SaveListener() {

            @Override
            public void onSuccess() {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "创建数据成功:"+userInfo.getObjectId(),Toast.LENGTH_LONG ).show();
            }

            @Override
            public void onFailure(int arg0, String arg1) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "-->创建数据失败:" + arg0+",msg = "+arg1,Toast.LENGTH_LONG ).show();
            }
        });
    }

在此过程中遇到1个问题:
过于注重上传文件后将文件删除,导致将上传的BmobFile 删除早了,导致开始上传图片失败。原因还是对SDK不够熟悉,以后注意。
还遇到一个问题:
http://yuwenbin12345.blog.163.com/blog/static/438866520112105515245/
类似这个问题,我用的ProgressDialog 每次pd.show()时出现问题。
好了上两张图片:Android 登陆界面 和 服务器数据
这里写图片描述

这里写图片描述

    下一章介绍登陆。
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值