前言:一切以Bmob官方开发文档为准: http://doc.bmob.cn/data/android/develop_doc/ ,查看Bmob后台数据是个好习惯
作为只会app客户端,不懂服务端的人,Bmob简直就是救命稻草!用它来存放爬取的数据,朋友圈数据,图片语音视频,还有app版本更新…易如反掌。经常有同学问如何上传头像、文件、图片bla bla,重要的事说三遍:绑定独立域名,绑它,绑它!具体怎么绑问度娘。当然Bmob也提供此类服务,收费,至于价格,还好啦…
特别提醒:使用androidx的同学 ,查看下 gradle.properties文件中 是否包含以下两行,若无则加上:
android.useAndroidX=true
android.enableJetifier=true
一、工程目录下的 build.gradle 文件中添加:
maven {url 'https://dl.bintray.com/chaozhouzhang/maven' }
添加后的样子,gradle用你自己的版本就好:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven {url 'https://dl.bintray.com/chaozhouzhang/maven' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
二 、 app下 build.gradle 文件中添加:
1)useLibrary 'org.apache.http.legacy'
2)compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
3)implementation 'cn.bmob.android:bmob-sdk:3.7.8'
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
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'
添加后的build.gradle文件:
apply plugin: 'com.android.application'
android {
useLibrary 'org.apache.http.legacy'
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.asus.bmobtest"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'cn.bmob.android:bmob-sdk:3.7.8'
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
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'
}
前面两步是如何导入Bmob,不要忘记同步一下
三、清单文件中配置 Bmob Provider
<!--Bmob-->
<provider
android:name="cn.bmob.v3.util.BmobContentProvider"
android:authorities="自己的包名.BmobContentProvider" />
四、初始化
1)新建一个用户类 MyUser,注意要继承BmobUser(名字任意)
public class MyUser extends BmobUser {
private String tokenNickName;
public String getTokenNickName() {
return tokenNickName;
}
public void setTokenNickName(String tokenNickName) {
this.tokenNickName = tokenNickName;
}
}
2)新建一个Bmob单例管理类:BmobManager
public class BmobManager {
private static final String BMOB_SDK_ID = "自己Bmob账号";
private volatile static BmobManager mInstance = null;
private BmobManager() {
}
public static BmobManager getInstance() {
if (mInstance == null) {
synchronized (BmobManager.class) {
if (mInstance == null) {
mInstance = new BmobManager();
}
}
}
return mInstance;
}
//初始化Bmob
public void initBmob(Context mContext) {
Bmob.initialize(mContext, BMOB_SDK_ID);
}
// 手机登录成功后获取本地对象
public MyUser getUser() {
return BmobUser.getCurrentUser(MyUser.class);
}
// 是否登录
public boolean isLogin() {
return BmobUser.isLogin();
}
}
3)新建一个自己的Application类,对Bmob进行初始化,并在清单文件 AndroidManafest.xml 标签下进行指定,务必加上该类完整包名!
public class BaseApp extends Application {
private static Context sContext;
@Override
public void onCreate() {
super.onCreate();
sContext = getApplicationContext();
//只在主进程中初始化
if (getApplicationInfo().packageName.equals(
getCurProcessName(getApplicationContext()))) {
//初始化bmob
BmobManager.getInstance().initBmob(this);
}
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
}
// 获取当前进程名
public static String getCurProcessName(Context context) {
int pid = android.os.Process.myPid();
ActivityManager activityManager = (ActivityManager)
context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo appProcess :
activityManager.getRunningAppProcesses()) {
if (appProcess.pid == pid) {
return appProcess.processName;
}
}
return null;
}
public static Context getContext() {
return sContext;
}
}
***强烈建议在清单文件里加上相应权限,否则注册时会出现9015错误
errorCode:9015,errorMsg:java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:150)
完整 清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.asus.bmobtest">
<!-- 允许联网 -->
<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" />
<application
android:name="com.example.asus.bmobtest.base.BaseApp"
android:usesCleartextTraffic="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--Bmob-->
<provider
android:name="cn.bmob.v3.util.BmobContentProvider"
android:authorities="com.example.asus.bmobtest.BmobContentProvider" />
<activity android:name=".activity.RegisterActivity"/>
</application>
</manifest>
五、创建一个RegisterActivity 类去注册登录
这里为了方便,使用账号密码登录,也可以用短信或者第三方登录。短信登录每天有免费条数限制,具体查看官方文档。下面的注册方法,请从界面的EditText读取相关数据,再调用。关键注册代码:
参数:
myAccount 账号,方便起见,请填入电话号码
password 密码
nickName 你的网络称呼
//账号密码注册,
private void signUp(final String myAccount, final String password,String nickName) {
MyUser user = new MyUser();
user.setUsername(myAccount);
user.setPassword(password);
user.setTokenNickName(nickName);
user.signUp(new SaveListener<MyUser>() {
@Override
public void done(MyUser user, BmobException e) {
if (e == null) {
Log.i("register","注册成功");
//去登录
loginByAccount(myAccount, password);
} else {
Log.i("register","注册失败:" + e.toString());
}
}
});
}
下面是登录的方法,若为单独登录界面,请从界面的EditText读取相关数据,再调用。这里是注册成功直接调用登录。关键登录代码:
/**
* 账号密码登录
* 参数 同上
*/
private void loginByAccount(final String myAccount, String password) {
//此处替换为你的用户名密码
BmobUser.loginByAccount(username, password, new LogInListener<MyUser>() {
@Override
public void done(MyUser user, BmobException e) {
if (e == null) {
Log.i("register","登录成功");
//bmob登录成功,保存账号和密码
//do something
} else {
Log.i("register","登录失败:" + e.toString());
}
}
});
}
六、运行代码进行注册登录。Bmob后台查看_User表,看是否注册成功
登录Bmob,查看后台数据
Bmob后台用户数据: