Android开发笔记(一)——采用Cloud存储的登录注册

        由于最近要做一个Android的项目作为课程设计,因此又开启了我的学习(ao ye)之旅。今天首先要完成的是登录注册的实现,由于想学习一下LeanCloud的用法,因此我的用户的用户名密码等数据是存储在LeanCloud中的。

1、先在LeanCloud上进行注册,选择个人开发版是有访问次数的限制但是是免费的,点击创建应用——设置,获取APP Key和ID:

2、接下来在Android Studio中新建一个项目(这个自己决定自己的项目),

使用 Android Studio 创建一个新的项目的时候,它的目录结构如下:

.
├── app                 // 应用源代码
    ├── ...
    ├── build.gradle    // 应用 Gradle 构建脚本
    ├── ...
├── build.gradle        // 项目 Gradle 构建脚本
├── YOUR-APP-NAME.iml   // YOUR-APP-NAME 为你的应用名称
├── gradle
└── settings.gradle

3、进行基本的配置:

(1) 首先打开 app 目录下的 build.gradle 进行如下配置:

android {
    //为了解决部分第三方库重复打包了META-INF的问题
    packagingOptions{
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    lintOptions {
        abortOnError false
    }
}

dependencies {
    compile ('com.android.support:support-v4:21.0.3')

    // LeanCloud 基础包
    compile ('cn.leancloud.android:avoscloud-sdk:4.7.9')

    // 推送与即时通讯需要的包
    compile ('cn.leancloud.android:avoscloud-push:4.7.9@aar'){transitive = true}

    // Android 混合推送需要的包
    compile ('cn.leancloud.android:avoscloud-mixpush:4.7.9@aar'){transitive = true}

    // LeanCloud 用户反馈包
    compile ('cn.leancloud.android:avoscloud-feedback:4.7.9@aar')

    // LeanCloud 应用内搜索包
    compile ('cn.leancloud.android:avoscloud-search:4.7.9@aar')
}

(2)从 4.7.8 版本开始,已经把 SDK library 推送到了 maven central repository,推荐大家使用这种方式。 同时,也搭建了 LeanCloud 的 maven 仓库,以便在中央仓库访问不了的时候备用,如果要访问maven 仓库,需要在项目根目录下的 build.gradle 进行如下标准配置:

打开根目录下的build.gradle进行如下配置:

buildscript {
    
    repositories {
        google()
        jcenter()
        maven {
            url "http://mvn.leancloud.cn/nexus/content/repositories/public"//仓库地址
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        
 
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
 
allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "http://mvn.leancloud.cn/nexus/content/repositories/public"//仓库地址
        }
    }
}
 
task clean(type: Delete) {
    delete rootProject.buildDir
}

 然后打开APP目录下的build.gradle进行如下配置:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.flag"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:support-vector-drawable:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

3、新建一个类继承Application,并初始化AppId和AppKey,作为全局变量,以便使用:


import android.app.Application;
 
import com.avos.avoscloud.AVOSCloud;
 
public class MyLeanCloudApp extends Application {
 
    @Override
    public void onCreate() {
        super.onCreate();
 
        // 初始化参数依次为 this, AppId, AppKey
        AVOSCloud.initialize(this,"AppID","AppKey");
    }
}

4、在AndroidManifest.xml 文件来配置 SDK 所需要的手机的访问权限以及声明刚才我们创建的MyLeanCloudApp 类,

因为要访问权限所以需要申请一系列的许可:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flagapplication">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:name=".MyLeanCloudApp"
        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">
        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".registerActivity"></activity>
        <activity android:name=".flagActivity"></activity>
    </application>

</manifest>

特别需要注意的是新版本的SDK已经不再支持“org.apache.http”,在库里已经不默认包含了,如果还要继续使用的话需要在Manifest文件输入以下代码进行设置:

<uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />

5、点击登录按钮时,实现功能的函数如下:

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.login:
                AVUser.logInInBackground(edit_name.getText().toString(), edit_pwd.getText().toString(), new LogInCallback<AVUser>() {
                    @Override
                    public void done(AVUser avUser, AVException e) {
                        if(e==null){
                            startActivity(new Intent(MainActivity.this,flagActivity.class));
                            finish();
                            }
                            else{
                            Toast.makeText(MainActivity.this,"用户名或密码错误",Toast.LENGTH_LONG).show();
                            }
                    }
                });
                break;
            case R.id.register:
                Intent intent=new Intent(this,registerActivity.class);
                startActivity(intent);
                break;
            case R.id.forget:
                break;
        }
    }

6、实现注册功能:

@Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.cancel:
                Intent intent=new Intent(this,MainActivity.class);
                startActivity(intent);
                break;
            case R.id.Re:
                AVUser user=new AVUser();
                user.setUsername(edit_rename.getText().toString());
                user.setEmail(edit_reemail.getText().toString());
                user.setPassword(edit_repwd.getText().toString());
                user.signUpInBackground(new SignUpCallback() {
                    @Override
                    public void done(AVException e) {
                        if(e==null){
                            startActivity(new Intent(registerActivity.this,MainActivity.class));
                            registerActivity.this.finish();
                            }
                            else{
                            Toast.makeText(registerActivity.this,"账号已经存在,请重新输入",Toast.LENGTH_LONG).show();
                            }
                    }
                });
                break;
        }
    }

登录和注册我是写在两个Activity中的,都是extends AppCompatActivity implements View.OnClickListener,至于界面的布局就根据自己的设计去编写layout布局文件

猜你喜欢

转载自blog.csdn.net/weixin_39626452/article/details/88355391