Bmob 萌新也能简易上手 之一 注册登录- *2020版

前言:一切以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后台用户数据:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u010475354/article/details/106843790