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" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<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类一样的表名和列名的一张表,数据也是我们刚插入的数据
那到这里,我们就完成了环境的搭建和数据的插入操作,其余的操作我们都可以到官网的文档中进行查看。这里就不再进行介绍。俗话说得好,万事开头难,编程就是环境的搭建难。