Android如何使用Bmob后端云实现失物招领功能

最近在使用后端云Bmob对数据进行存储,目的是在不搭建服务器的前提下,能对Android应用的数据进行操作处理,其实这篇是比较久之前写的了,有些童鞋反馈说现在的源码会有问题,所以我又重新运行了一下,随着Bmob版本的更新,之前的源码跑不起来,现在重新更新了最新版本做了个Demo.

实现步骤:

一、创建账号

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

二、网站后台创建应用(如图)

这里使用的是免费版的

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

三、AndroidStudio SDK导入信息配置

详细参考:http://doc.bmob.cn/data/android/index.html

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

buildscript {

  repositories {
    google()
        jcenter()   
  }
  dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
  }
}

allprojects {
  repositories {
    google()
    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依赖文件:

android {
    compileSdkVersion 30
  buildToolsVersion "30.0.3"

  **兼容Android6.0系统所需,如果这句话报错,可在dependencies标签下使用compile 'cn.bmob.android:http-legacy:1.0'**
  useLibrary 'org.apache.http.legacy'

  ...
}
dependencies {
  //以下SDK开发者请根据需要自行选择
  //bmob-sdk:Bmob的android sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk:
  //3.5.5:请务必查看下面注释[1]
  implementation 'cn.bmob.android:bmob-sdk:3.5.5'

  //bmob-push:Bmob的推送包
  implementation 'cn.bmob.android:bmob-push:0.8'

  //bmob-im:Bmob的即时通讯包,注意每个版本的im依赖特定版本的bmob-sdk,具体的依赖关系可查看下面注释[2]
  implementation 'cn.bmob.android:bmob-im:2.0.5@aar'
  implementation 'cn.bmob.android:bmob-sdk:3.4.7-aar'

  //bmob-sms :Bmob单独为短信服务提供的包
  implementation 'cn.bmob.android:bmob-sms:1.0.1'

  //如果你想应用能够兼容Android6.0,请添加此依赖(org.apache.http.legacy.jar)
  implementation '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、由登录界面进入注册页面,进行账户注册:

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

  private void bmobRegisterAccount() {
    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、注册成功后回到登录界面

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

  private void bmobUserAccountLogin() {
    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、发布信息:

  /**
   * @param titleName 标题
   * @param num    电话号码
   * @param descridle 描述
   */
  private void publishLostInfo(String titleName, String num, String descridle) {
    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、主界面的信息需要读取后台用户插入的数据:

数据的查询:

  private void initData() {
    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、删除操作即是将后台中的将选中的信息删除

  private void deleteItemData(final int position) {
    if (lostInfomationReqList.size() != 0) {
      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、编辑操作即对数据进行修改

  /**
   * @param titleName 标题
   * @param num    电话号码
   * @param descridle 描述
   */
  private void updataInfo(String titleName, String num, String descridle) {
    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长按弹出框

  private void showWindow(LostAndFoundHolder holder, final int pos) {
    //加载布局文件
    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还需要掌握。

BmobDemo源码:
链接:https://pan.baidu.com/s/1wTcWWEitQT65MDtr3PSvhQ
提取码:emue

以上就是Android如何使用Bmob后端云实现失物招领功能的详细内容,更多关于Android 实现失物招领功能的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android中的Bmob移动后端云服务器功能

    源码下载:http://xiazai.jb51.net/201801/yuanma/BmobTest1.rar PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己用servlet作为服务端来实现过滤没有注册过的用户,但是太麻烦,而且不是随时都可以用的.这里介绍一个移动后端云服务器平台bmob,这不仅可以实现云数据库储存,还可以获取手机验证等,随时随地都很轻松,下面写一个小demo,实现一个登陆注册功能,认识增删查改.下面我稍微写一个例子,简单实现注册登录功能.

  • Android中用Bmob实现短信验证码功能的方法详解

    这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应用软件,他提供了大量的标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速,验证码功能就是其中一个. 一.跟其他第三方一样,我们开发之前要做一些准备工作. 1.首先,去官网注册一个帐号:http://www.bmob.cn/: 2.然后就可以创建应用了:具体怎么做Bmob说得很清楚了(官方操作介绍),如果你不想看,我简单说一下:点击右

  • android studio无法添加 bmob sdk依赖问题及解决方法

    1,关闭 app的  grader.build下的implementation 对应sdk依赖.注释掉 2,去bmob官网下载sdk 压缩包,解压,找到lib文件夹.看到的是这样的: https://www.bmob.cn/downloads 3,因为  3下面的几个jar是可以正常添加依赖的,就不需要额外手动添加了.只用添加1,2,3 . 在app下创建libs 文件夹,将  图片红框3放入:然后在src/main下创建JniLibs,将图片红框1,2 放入. 4,在app的gradler.b

  • Android使用第三方服务器Bmob实现发送短信验证码

    调用Bmob第三方服务器实现短信验证的功能,大致思路如下: 随机产生6位数字,然后调用Bmob的请求短发函数发送者六位数到服务器,然后服务器给指定手机发送这6位验证码,然后感觉用户输入的数字进行判断,如果输入的和发送的相等,则验证成功. 第一步.请求验证码: SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sendTime = format.format(new Date());

  • Android如何使用Bmob后端云实现失物招领功能

    最近在使用后端云Bmob对数据进行存储,目的是在不搭建服务器的前提下,能对Android应用的数据进行操作处理,其实这篇是比较久之前写的了,有些童鞋反馈说现在的源码会有问题,所以我又重新运行了一下,随着Bmob版本的更新,之前的源码跑不起来,现在重新更新了最新版本做了个Demo. 实现步骤: 一.创建账号 需要的自己去注册,后端云Bmob首页地址:https://www.bmob.cn/ 二.网站后台创建应用(如图) 这里使用的是免费版的 创建成功之后点击创建的应用进去,在设置->应用秘钥中可以

  • Android自定义控件ViewGroup实现标签云

    本文实例为大家分享了Android自定义控件ViewGroup实现标签云的具体代码,供大家参考,具体内容如下 实现的功能: 基本绘制流程: 构造函数获取自定义属性 onMeasure()方法,测量子控件的大小 onLayout()方法,对子控件进行布局 1.自定义属性 <resources> <declare-styleable name="TabsViewGroup"> <attr name="tabVerticalSpace" fo

  • Android的简单前后端交互(okHttp+springboot+mysql)

    前言 前阵子发现了个有意思又好用的框架--okHttp.由于课程设计需要,无意间发现了这个框架,打算利用此框架与后端交互,可以参考前后端分离的项目,把android当做前端,springboot当做后端,以下是二者的简单交互. okHttp说明 (1)android网络框架之OKhttp 一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso) 用于替代HttpUrlConnection和Apache HttpClient (2)ok

  • Android完整的前后端交互参考案例

    目录 API 连接获取(~~Api.java) 文件创建 文件内容 POST Observable 数据请求以及设定(~~Data.java) 数据请求函数(public static class ~~~Request) 数据返回列表函数( public static class ~~~List) 成员变量 返回数据列表设置函数 数据请求以及设定 数据请求 数据显示 Adapter(适配器)设置 Android 前端获取数据并显示 API 连接获取(~~Api.java) 文件创建 新建Kotl

  • Android开发实现模仿360二维码扫描功能实例详解

    本文实例讲述了Android开发实现模仿360二维码扫描功能的方法.分享给大家供大家参考,具体如下: 一.效果图: 二.框架搭建 1.首先,下载最新zxing开源项目. 下载地址:http://code.google.com/p/zxing/ 或 点击此处本站下载. 2.分析项目结构,明确扫描框架需求.在zxing中,有很多其他的功能,项目结构比较复杂:针对二维码QRCode扫描,我们需要几个包: (1)com.google.zxing.client.android.Camera 基于Camer

  • Android编程实现长按Button按钮连续响应功能示例

    本文实例讲述了Android编程实现长按Button按钮连续响应功能.分享给大家供大家参考,具体如下: 在电商类app的购物车页面,经常会有这样的需求:长按"+"按钮或者"-"按钮时,购物车中的商品数量连续的增加或减少. 本例的目的就是为了实现这个效果.预览图: 1.自定义Button. /** * 长按连续响应的Button * Created by admin on 15-6-1. */ public class LongClickButton extends

  • Android中的二维码生成与扫描功能

    0. 前言 今天这篇文章主要描述二维码的生成与扫描,使用目前流行的Zxing,为什么要讲二维码,因为二维码太普遍了,随便一个Android APP都会有二维码扫描.本篇旨在帮助有需求的同学快速完成二维码生成和扫描的功能. 1.    Zxing的使用 从github上下载项目后,可以看到整体代码结构如下: 我们只需将Zxing包下的所有代码copy一份到我们的项目中去,除了这些还需要zxing的jar包,最后相应的资源文件,包括values文件下的ids文件.raw文件中的资源文件(可以替换).

  • Android基于广播事件机制实现简单定时提醒功能代码

    本文实例讲述了Android基于广播事件机制实现简单定时提醒功能代码.分享给大家供大家参考,具体如下: 1.Android广播事件机制 Android的广播事件处理类似于普通的事件处理.不同之处在于,后者是靠点击按钮这样的组件行为来触发,而前者是通过构建Intent对象,使用sentBroadcast()方法来发起一个系统级别的事件广播来传递信息.广播事件的接收是通过定义一个继承Broadcast Receiver的类实现的,继承该类后覆盖其onReceive()方法,在该方法中响应事件.And

  • Android开发使用Drawable绘制圆角与圆形图案功能示例

    本文实例讲述了Android开发使用Drawable绘制圆角与圆形图案功能.分享给大家供大家参考,具体如下: 1. 创建类RoundCircleDrawable继承Drawable /** * 圆角矩形 * @Project App_View * @Package com.android.view.drawable * @author chenlin * @version 1.0 * @Date 2016年4月21日 * @Note TODO */ public class RoundCircl

随机推荐