美文网首页Android录集(公众号:龙旋)Android开发Android技术知识
Android使用后端云Bmob实现登录、注册及失物招领

Android使用后端云Bmob实现登录、注册及失物招领

作者: 龙旋之谷 | 来源:发表于2019-06-20 09:31 被阅读3次

    最近在使用后端云Bmob对数据进行存储,目的是在不搭建服务器的前提下,能对Android应用的数据进行操作处理。

    一、创建账号
    需要的自己去注册,后端云Bmob首页地址:https://www.bmob.cn/

    二、网站后台创建应用(如图)
    这里使用的是免费版的


    在这里插入图片描述

    创建成功之后点击创建的应用进去,在设置->应用秘钥中可以找到应用秘钥


    在这里插入图片描述

    三、AndroidStudio SDK导入信息配置
    详细参考:http://doc.bmob.cn/data/android/index.html

    1、在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.3'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
            //Bmob的maven仓库地址--必填
            maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    2、在app的build.gradle文件中添加compile依赖文件

     apply plugin: 'com.android.application'
    
        android {
            compileSdkVersion 22
            buildToolsVersion '22.0.1'
    
            **兼容Android6.0系统所需,如果这句话报错,可在dependencies标签下使用compile 'cn.bmob.android:http-legacy:1.0'**
            useLibrary 'org.apache.http.legacy'
    
            ...
        }
    
    
        dependencies {
            compile fileTree(dir: 'libs', include: ['*.jar'])
    
            //以下SDK开发者请根据需要自行选择
            //bmob-sdk:Bmob的android sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk:
            //3.5.5:请务必查看下面注释[1]
            compile 'cn.bmob.android:bmob-sdk:3.6.3'
    
            //bmob-push:Bmob的推送包
            compile 'cn.bmob.android:bmob-push:0.8'
    
            //bmob-im:Bmob的即时通讯包,注意每个版本的im依赖特定版本的bmob-sdk,具体的依赖关系可查看下面注释[2]
            compile 'cn.bmob.android:bmob-im:2.1.0@aar'
    
            //如果你想应用能够兼容Android6.0,请添加此依赖(org.apache.http.legacy.jar)
            compile 'cn.bmob.android:http-legacy:1.0'
        }
    
    

    3、在你的应用程序的AndroidManifest.xml文件中添加相应的权限:

    <!--允许联网 --> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!--获取GSM(2g)、WCDMA(联通3g)等网络状态的信息  --> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <!--获取wifi网络状态的信息 --> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <!--保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <!--获取sd卡写的权限,用于文件上传和下载-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--允许读取手机状态 用于创建BmobInstallation--> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    四、应用中使用详情
    这里演示部分的API
    1、启动页


    在这里插入图片描述

    初始化BmobSDK:

    //第一:默认初始化
            Bmob.initialize(this, "Your Application ID");
    

    2、由登录界面进入注册页面,进行账户注册


    在这里插入图片描述

    输入账号密码后点击注册按钮:

          final String registerName = accountRegisterName.getText().toString().trim();//账号
            final String registerPassword = accountRegisterPassword.getText().toString().trim();//密码
    
            if (TextUtils.isEmpty(registerName) || TextUtils.isEmpty(registerPassword)) {
                showToast("注册账号或密码为空");
                return;
            }
    
            BmobUser bmobUser = new BmobUser();
            bmobUser.setUsername(registerName);
            bmobUser.setPassword(registerPassword);
            bmobUser.signUp(new SaveListener<BmobUser>() {
                @Override
                public void done(BmobUser bmobUser, BmobException e) {
                    if (e == null) {
                        showToast("恭喜,注册账号成功");
                        finish();
                    } else {
                        showToast("register fail:" + e.getMessage());
                    }
                }
            });
    

    注册成功后在后端云Bmob后台有信心记录:


    在这里插入图片描述

    3、注册成功后回到登录界面


    在这里插入图片描述

    输入账号密码后点击登录按钮:

       final String accountName = accountLoginName.getText().toString().trim();//账号
            final String accountPassword = accountLoginPassword.getText().toString().trim();//密码
    
            if (TextUtils.isEmpty(accountName)) {
                showToast("账号不能为空");
                return;
            }
    
            if (TextUtils.isEmpty(accountPassword)) {
                showToast("密码不能为空");
                return;
            }
    
            //登录过程
            showProgressBar();
    
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    //BmobUser类为Bmob后端云提供类
                    BmobUser bmobUser = new BmobUser();
                    bmobUser.setUsername(accountName);
                    bmobUser.setPassword(accountPassword);
                    bmobUser.login(new SaveListener<BmobUser>() {
                        @Override
                        public void done(BmobUser bmobUser, BmobException e) {
                            if (e == null) {
                                //登录成功后进入主界面
                                Intent intent = new Intent(LoginActivity.this, LostAndFoundActivity.class);
                                startActivity(intent);
                                finish();
                            } else {
                                showToast(""+e.getMessage());
                                hiddenProgressBar();//隐藏
                            }
                        }
                    });
                }
            }, 3000);
    

    4、登录成功后进入主界面,右上方按钮进入失物招领的信息发布界面


    在这里插入图片描述

    4-1、信息完成后,点击右上角点击发布按钮,此时需要添加数据:
    先创建bean类,继承BmobObject类

    public class LostInfomationReq extends BmobObject{
        private String title;  //标题
        private String phoneNum;//手机号码
        private String desc;//描述
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getPhoneNum() {
            return phoneNum;
        }
    
        public void setPhoneNum(String phoneNum) {
            this.phoneNum = phoneNum;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    }
    

    4-2、发布信息:

          LostInfomationReq lostInfomationReq = new LostInfomationReq();
            lostInfomationReq.setTitle(titleName);//titleName为用户输入的标题
            lostInfomationReq.setPhoneNum(num);//num为用户输入的号码
            lostInfomationReq.setDesc(descridle);//descridle为信息描述
            lostInfomationReq.save(new SaveListener<String>() {
                @Override
                public void done(String s, BmobException e) {
                    if (e == null) {
                        showToast("招领信息发布成功");
    
                        //成功后提示主界面刷新数据
                        Intent intent = new Intent();
                        setResult(RESULT_OK, intent);
                        //成功后将页面销毁
                        finish();
                    } else {
                        showToast("信息发布失败");
                    }
                }
            });
    

    4-3、添加数据成功后,在后台会有插入的数据:


    在这里插入图片描述

    5、主界面的信息需要读取后台用户插入的数据


    在这里插入图片描述

    数据的查询:

     BmobQuery<LostInfomationReq> lostInfomationReqBmobQuery = new BmobQuery<>();
            lostInfomationReqBmobQuery.order("-updatedAt");//排序
            lostInfomationReqBmobQuery.findObjects(new FindListener<LostInfomationReq>() {
                @Override
                public void done(List<LostInfomationReq> list, BmobException e) {
                    if (e == null) {
                        lostInfomationReqList = list;
                        lostAndFoundAdapter.setData(list);
                        recyclerView.setAdapter(lostAndFoundAdapter);
                    } else {
                        showToast("查询数据失败");
                    }
                }
            });
    

    6、长按RecyclerView每条Item进行编辑与删除操作


    在这里插入图片描述

    6-1、删除操作即是将后台中的将选中的信息删除

        LostInfomationReq lostInfomationReq = new LostInfomationReq();
                lostInfomationReq.setObjectId(lostInfomationReqList.get(position).getObjectId());
                lostInfomationReq.delete(new UpdateListener() {
                    @Override
                    public void done(BmobException e) {
                        if (e == null) {
                            lostInfomationReqList.remove(position);
                            lostAndFoundAdapter.setData(lostInfomationReqList);
                            lostAndFoundAdapter.notifyDataSetChanged();
                        } else {
                            showToast("删除数据失败");
                        }
                    }
                });
    

    6-2、编辑操作即对数据进行修改

        LostInfomationReq lostInfomationReq = new LostInfomationReq();
            lostInfomationReq.setTitle(titleName);//titleName为用户输入的标题
            lostInfomationReq.setPhoneNum(num);//num为用户输入的号码
            lostInfomationReq.setDesc(descridle);//descridle为信息描述
            lostInfomationReq.update(infomationReq.getObjectId(), new UpdateListener() {
                @Override
                public void done(BmobException e) {
                    if (e == null) {
                        showToast("更新信息成功");
                        //更新数据后提示主界面进行数据刷新
                        Intent intent = new Intent();
                        setResult(RESULT_OK, intent);
                        finish();
                    }
                }
            });
    

    7、使用PopupWindow长按弹出框

             //加载布局文件
            View contentview = LayoutInflater.from(mContext).inflate(R.layout.pop_window_view,null);
            final PopupWindow popupWindow = new PopupWindow(contentview, LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            //设置焦点
            popupWindow.setFocusable(true);
            //触摸框外
            popupWindow.setOutsideTouchable(true);
            //点击空白处的时候让PopupWindow消失
            popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
            //设置偏移量
            popupWindow.showAsDropDown(holder.time, 300, -100);
    
            //showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
           // showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
            //showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
    
            //点击编辑按钮
            contentview.findViewById(R.id.edit_btn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //回调给主界面,进行数据操作
                    mItemClickListener.onEditOrDeleteClick(pos, EDIT_CODE);
                    //销毁弹出框
                    popupWindow.dismiss();
                }
            });
    
            //点击删除按钮
            contentview.findViewById(R.id.delete_btn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //回调给主界面,进行数据操作
                    mItemClickListener.onEditOrDeleteClick(pos, DELETE_CODE);
                    //销毁弹出框
                    popupWindow.dismiss();
                }
            });
    

    8、总结
    8-1、实现登录、注册的过程:
    使用Bmob提供专门的用户类——BmobUser来自动处理用户账户管理所需的功能。有了这个类,你就可以在你的应用程序中添加用户账户功能。BmobUser是BmobObject的一个子类,它继承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的关于用户账户管理相关的功能。

    8-2、失物招领:
    这个过程中,我们对数据进行了添加、查询、删除以及更新操作,当然后端云Bmob还不止提供了这些API,还有很多API还需要掌握。

    8-3、需要Demo源码的童鞋,可以在底部公众号回复:"BmobDemo"即可获取。

    以下是个人公众号(longxuanzhigu),之后发布的文章会同步到该公众号,方便交流学习Android知识及分享个人爱好文章:


    在这里插入图片描述

    相关文章

      网友评论

        本文标题:Android使用后端云Bmob实现登录、注册及失物招领

        本文链接:https://www.haomeiwen.com/subject/tenrqctx.html