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

最近在使用后端云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"即可获取。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Flutter笔记

Flutter 约束宽高比的控件 AspectRatio

撸码前有个点要注意一下,文档上面说了, 该widget 首先会尝试布局约束所允许的最大宽度。

13510
来自专栏微卡智享

Android使用AsyncTask中Socket通讯与CallBack回调发现的问题

最近自己的程序在利用AsyncTask通过Socket获取实时数据,然后通过CallBack函数通知主进程更新UI中,发现了一个奇怪的问题,后来通过变通的方式修...

11630
来自专栏Flutter笔记

Flutter ExpansionPanel 超级实用展开控件

类似于这种,Flutter 给我们提供了相当便捷的 UI 组件 ExpansionPanel。

60530
来自专栏微卡智享

Android NDK编程(二)---CMakeList.txt详解

前一篇我们介绍了《Android NDK编程(一)---NDK介绍及环境搭建》,简单介绍了一下什么是NDK和JNI,以前NDK环境的配置及怎么创建第一个NDK的...

32030
来自专栏Flutter笔记

FutureBuilder源码分析

•future:是我们的异步请求,该异步请求必须不能在 build 方法中初始化!•initialData:如果Future 没有完成的情况下展示该数据•bui...

10920
来自专栏Flutter笔记

Flutter Scoped_Model 浅析

Flutter 作为借鉴了很多 React 思想的语言,自然也会有相对应的状态管理。

14430
来自专栏Flutter笔记

Flutter AnimatedIcon 了解一下

•icon:通过官方解释可以看得出来,它应该是 AnimatedIcons.xxx•progress:在该字段的上方,注释也给出了解释:动画的进度,值应该是0-...

13720
来自专栏Flutter笔记

一个会做饭的程序员如何每天给女朋友带不同的便当?

作为一个会做饭的程序员,每天给女朋友和自己带饭是必须的,可是每天要吃什么却是一个世纪难题!

14050
来自专栏Flutter笔记

Flutter测试(二):在项目中进行 Widget 测试

上回书对 Flutter 中 Widget 测试的官方 Demo 进行了简单的讲解,这篇文章我们对自己的项目进行 Widget 测试。

12620
来自专栏Flutter笔记

Flutter测试(一): Widget 测试了解一下

Widget 测试是类似于单元测试的一种,在测试中添加交互,例如:滚动、点击等,然后对结果进行验证。

21220

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励