Bmob 3.7.8 Android Studio 3.5的环境搭建 插入一条数据 快速入门 日期202074

    技术2025-04-13  8

    Bmob 3.7.8 Android Studio 3.5的环境搭建 日期2020/7/4

    为什么使用Bmob?

    因为不用自己搞服务器端,不用租赁服务器,不用管域名的问题,更多查看官网

    另外,使用到一定程度之前是免费的,纯属白嫖啊,秒啊对吧

    虽然Bmob官网拥有快速入门教程,并且B站也拥有一套教学视频,但是日期都是比较靠前的了,Bmob也在不断的更新,一些环境的搭建会有差异,这里就当做笔记记录一下流程

    要不是看着官方教程做了半天没搞定,也不会闲的写篇帖子 导入崩 初始化崩 运行崩 保存崩 这,谁受得了啊

    教程开始

    主要流程 Bmob官网注册账号官网个人中心创建一个APPAndroid Studio 创建项目使用Maven仓库添加依赖配置AndroidManifest.xml测试写入一条数据

    下面将进入多图模式,请注意

    首先在官网-个人中心-创建一个APP,以获得AppID

    注意,如果注册账号之后个人信息不完善,还有实名没有完善的话,下面将会无法操作

    获取APPID,查看APP的后台数据库数据也是这里进入

    复制APPID

    打开官方的快速开发文档,我们方便进行复制

    一边看文档,一边写bug才是我们该做的嘛,不对,是写代码

    进入android开发文档

    创建一个Android程序

    添加Bmob的Maven仓库
    //Bmob的maven仓库地址--必填 maven {url 'https://dl.bintray.com/chaozhouzhang/maven' }

    这里说一下,我为什么使用自动导入的方式,而不用手动导入的方式,原因很简单,手动导入之后,一堆报错,手足无措,算了算了,惹不起还躲不起吗? 手动导入会出现诸如下面的异常,好几页的日志报告,包重复等各种异常,不会搞定,以后再慢慢解决吧,编译都过不去,这还怎么玩耍,对吧,看着就头大,而且我这种小白,我自己写的bug获取能解决,这一个第三方,wtf?

    Duplicate class android.support.v4.graphics.drawable.Icon... Execution failed for task ':app:mergeDebugJavaResource' ... Execution failed for task ':app:checkDebugDuplicateClasses' ... org.gradle.execution.MultipleBuildFailures: Build completed with 2 fail ... ...

    添加项目属性
    compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } useLibrary 'org.apache.http.legacy'

    这里简要的说一下,第一个compileOptions块 ,是为了解决异常:

    Static interface methods are only supported starting with Android N (--min-api 24): okhttp3.Request okhttp3.Authenticator.lambda$static$0(okhttp3.Route, okhttp3.Response)

    第二个,useLibrary是为了适配高版本安卓,现在都什么年代了,高版本安卓不是很正常吗???

    添加项目依赖并同步,同步完成(步骤3)后才能进行下面的操作

    重要的事情说三遍,一定要同步,一定要同步,一定要同步 不然你写有关Bmob的,都将变为Boom,直接炸裂,全是红线

    implementation 'cn.bmob.android:bmob-sdk:3.7.8' implementation "io.reactivex.rxjava2:rxjava:2.2.8" implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.squareup.okhttp3:okhttp:3.14.1' implementation 'com.squareup.okio:okio:2.2.2' implementation 'com.google.code.gson:gson:2.8.5'

    配置Manifest的权限和ContentProvider
    <!--允许联网 --> <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" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <!--允许读取手机状态 用于创建BmobInstallation--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <provider android:name="cn.bmob.v3.util.BmobContentProvider" android:authorities="你的包名.BmobContentProvider"> </provider>

    添加一个实体类,需要继承自BmobObject,这样才能和后台进行数据的传递,对应了数据表中的一条记录
    import cn.bmob.v3.BmobObject; public class Person extends BmobObject { public String name; public String address; public Person(String name,String address){ this.name=name; this.address=address; } }

    后端可以自己创建数据表,也可以不创建,只要类继承了BmobObject,那么当调用BmobObject.save()方法时,如果没有对应的数据表,将会使用类名作为表名,成员变量作为表中的列名,这样形成一个直接映射,数据也进行自动的解析。 这里我Java学的不怎么样,但是这个原理应该是通过Java的反射机制实现的。数据的网络通信,采用异步方式进行,因此将会见到不少的监听器,其实都是为了进行异步处理。

    Bmob的初始化和插入一条数据
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{ Manifest.permission.READ_PHONE_STATE, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.WAKE_LOCK, Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE },0x1001); } Bmob.initialize(this,"02**************************6b"); Person p=new Person("ugex","地址数据"); p.save(new SaveListener<String>() { @Override public void done(String s, BmobException e) { Log.i("debuginfo","id:"+s+" Exception:"+(e==null?"":e.toString())); } });

    Bmob的初始化,调用Bmob.initialize(Context,String appID); 插入保存数据,调用BmobObject.save(SaveListener),保存的结果在done中体现,保存成功则BmobException为null,给出对应的ID:String 由于高版本安卓中,需要动态申请权限,因此添加权限的申请requestPermission

    运行项目,在Logcat中查看运行结果

    可以看到成功保存,没有异常产生 但是,如果你使用安卓10的真机进行运行,那么可能会直接闪退,原因是在调用BmobObject.save()方法时,会调用到getDeviceID(),由于安卓10的安全机制,会导致出错:

    java.lang.SecurityException: getDeviceId: The user 10355 does not meet the ...

    在后台查看数据

    同样进入我们的APP,进入数据表,可以看到和我们创建的Person类一样的表名和列名的一张表,数据也是我们刚插入的数据

    那到这里,我们就完成了环境的搭建和数据的插入操作,其余的操作我们都可以到官网的文档中进行查看。这里就不再进行介绍。俗话说得好,万事开头难,编程就是环境的搭建难。
    Processed: 0.011, SQL: 9