首页 > 代码库 > android 练习之路 (三)

android 练习之路 (三)

项目的github地址:https://github.com/Qunter/SearchAndCall

------------------------------------------------------------------------

今天开始实现登录和注册的功能

先贴最终效果吧

技术分享

PS:其实最后那一下,按照代码逻辑是不会返回到登录页面的,此处会返回应该是我没有删除之前的程序,所以在测试的时候就没有覆盖掉这些,所以导致这个finish代码没有执行

 

下面开始操作:

首先按照官网给的提示,在项目中加入如下代码以集成bmob的sdk

1,在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址

allprojects {

 repositories {
     jcenter()
     //Bmob的maven仓库地址--必填
     maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
 }
}

2,在appbuild.gradle文件中添加compile依赖文件(我只添加了sdk以及兼容6.0的http-legacy1.0包)

dependencies {
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
//bmob-sdk:Bmob的android sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk:3.5.3
    compile ‘cn.bmob.android:bmob-sdk:3.5.3‘

    //bmob-push:Bmob的推送包
    compile ‘cn.bmob.android:bmob-push:0.8‘

    //bmob-im:Bmob的即时通讯包,注意每个版本的im依赖特定版本的bmob-sdk
    compile ‘cn.bmob.android:bmob-im:2.0.5@aar‘
    compile ‘cn.bmob.android:bmob-sdk:3.4.7-aar‘

    //bmob-sms :Bmob单独为短信服务提供的包
    compile ‘cn.bmob.android:bmob-sms:1.0.1‘

    //如果你想应用能够兼容Android6.0,请添加此依赖(org.apache.http.legacy.jar)
    compile ‘cn.bmob.android:http-legacy:1.0‘
}

然后sync一下,bmob的sdk就算是导入了

但是光导入sdk还是用不了,因为没有给他权限,所以manifests里加个权限

  <!--允许联网 -->
    <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" />

再然后改一下之前的登录页面,之前有些命名要统一一下,然后没有加id的要加个id方便事件处理

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background">

    <ImageView
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:src="@drawable/backgroundlogo"
        android:layout_marginTop="50dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="170dp"
        android:background="@drawable/background_white"
        android:orientation="vertical"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp">

        <EditText
            android:id="@+id/login_usernameEt"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:singleLine="true"
            android:hint="登录帐号"
            android:drawableRight="@drawable/id"
            android:drawablePadding="5dp"/>

        <EditText
            android:id="@+id/login_passwordEt"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:singleLine="true"
            android:drawableRight="@drawable/password"
            android:drawablePadding="5dp"
            android:inputType="textPassword"
            android:hint="登录密码"/>

        <Button
            android:id="@+id/login_loginBtn"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:background="@drawable/ripple_button"
            android:textColor="#ffffff"
            android:text="登录"/>
        <Button
            android:id="@+id/login_registerBtn"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:background="@drawable/ripple_button"
            android:textColor="#ffffff"
            android:text="注册"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            android:background="@null"
            android:textColor="#0099ff"
            android:text="忘记密码"/>

    </LinearLayout>

</RelativeLayout>

然后既然今天还要做注册,那么注册页也得弄一个

activity_register.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background">
    <ImageView
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:src="@drawable/backgroundlogo"
        android:layout_marginTop="50dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="170dp"
        android:background="@drawable/background_white"
        android:orientation="vertical"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp">

        <EditText
            android:id="@+id/register_usernameEt"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:singleLine="true"
            android:hint="请输入账号"
            android:drawablePadding="5dp"/>

        <EditText
            android:id="@+id/register_passwordEt"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:singleLine="true"
            android:drawablePadding="5dp"
            android:inputType="textPassword"
            android:hint="请输入密码"/>

        <EditText
            android:id="@+id/register_userPhoneEt"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:singleLine="true"
            android:drawablePadding="5dp"
            android:hint="请输入手机号"/>
        <EditText
            android:id="@+id/register_userNicknameEt"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:singleLine="true"
            android:drawablePadding="5dp"
            android:hint="请输入昵称"/>
        <Button
            android:id="@+id/register_registerBtn"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:background="@drawable/ripple_button"
            android:textColor="#ffffff"
            android:text="注册"/>

        <Button
            android:id="@+id/register_loginBtn"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            android:background="@null"
            android:textColor="#0099ff"
            android:text="已有账号  立即登录"/>

    </LinearLayout>

</RelativeLayout>

再然后得建一个注册的Activity

RegisterActivity.java

public class RegisterActivity extends BaseActivity implements View.OnClickListener{
    private EditText usernameEt,passwordEt,userPhoneEt,userNicknameEt;
    private Button registerBtn,loginBtn;
    private UserIfmt userInformation;
    @Override
    protected void initVariablesAndService() {
        Bmob.initialize(this,"8da888d03200ff2f6b403d064b805d60");
    }

    @Override
    protected void initViews(Bundle savedInstanceState) {
        setContentView(R.layout.activity_register);
        usernameEt = (EditText) findViewById(R.id.register_usernameEt);
        passwordEt = (EditText) findViewById(R.id.register_passwordEt);
        userPhoneEt = (EditText) findViewById(R.id.register_userPhoneEt);
        userNicknameEt = (EditText) findViewById(R.id.register_userNicknameEt);
        registerBtn = (Button) findViewById(R.id.register_registerBtn);
        registerBtn.setOnClickListener(this);
        loginBtn = (Button) findViewById(R.id.register_loginBtn);
        loginBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.register_registerBtn:
                register();
                break;
            case R.id.register_loginBtn:
                startActivity(LoginActivity.class);
                this.finish();
                break;
        }
    }
    /**
     * 注册账号至bmob
     */
    private void register(){
        userInformation = new UserIfmt();
        userInformation.setUsername(usernameEt.getText().toString().trim());
        userInformation.setPassword(passwordEt.getText().toString().trim());
        userInformation.setUserPhone(userPhoneEt.getText().toString().trim());
        userInformation.setUserNickname(userNicknameEt.getText().toString().trim());
        userInformation.signUp(new SaveListener<UserIfmt>() {
            @Override
            public void done(UserIfmt s, BmobException e) {
                if(e==null){
                    Toast.makeText(RegisterActivity.this,"注册成功", Toast.LENGTH_SHORT).show();
                    userInformation.login(new SaveListener<UserIfmt>() {
                        @Override
                        public void done(UserIfmt userIfmt, BmobException e) {
                            if(e==null){
                                Toast.makeText(RegisterActivity.this,"登录成功", Toast.LENGTH_SHORT).show();
                                startActivity(MainActivity.class);
                                RegisterActivity.this.finish();
                            }
                        }
                    });
                }else{
                    Log.e("失败代码",e.toString());
                }

            }
        });
    }
}

然后转头一看,之前的登录activity还没加事件处理呢,改一下

LoginActivity.java

public class LoginActivity extends BaseActivity implements View.OnClickListener{
    private EditText usernameEt,passwordEt;
    private Button loginBtn,registerBtn;
    @Override
    protected void initVariablesAndService() {
        Bmob.initialize(this,"8da888d03200ff2f6b403d064b805d60");
    }

    @Override
    protected void initViews(Bundle savedInstanceState) {
        setContentView(R.layout.activity_login);
        usernameEt = (EditText) findViewById(R.id.login_usernameEt);
        passwordEt = (EditText) findViewById(R.id.login_passwordEt);
        loginBtn = (Button) findViewById(R.id.login_loginBtn);
        loginBtn.setOnClickListener(this);
        registerBtn = (Button) findViewById(R.id.login_registerBtn);
        registerBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.login_loginBtn:
                login();
                break;
            case R.id.login_registerBtn:
                startActivity(RegisterActivity.class);
                this.finish();
                break;
        }
    }
    /**
     * 在bmob数据库上验证账号并登录
     */
    private void login(){
        UserIfmt userInformation = new UserIfmt();
        userInformation.setUsername(usernameEt.getText().toString());
        userInformation.setPassword(passwordEt.getText().toString());
        userInformation.login(new SaveListener<UserIfmt>() {
            @Override
            public void done(UserIfmt userIfmt, BmobException e) {
                if(e==null){
                    Toast.makeText(LoginActivity.this,"登录成功", Toast.LENGTH_SHORT).show();
                    startActivity(MainActivity.class);
                    LoginActivity.this.finish();
                }else{
                    Toast.makeText(LoginActivity.this,"账号或密码错误  请重新输入", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

这里要说一下,暂时先不用缓存登录(自动登录),因为退出登录还没有做,所以这里如果用的话对后面账号数据会有影响

那么这里面用了个MainActivity,之所以有这个类,是因为方便测试今天的登录结果,所以今天暂时建一下,只要很简单的显示个文字,让我知道成功跳转页面了就行

MainActivity.java

public class MainActivity extends BaseActivity {
    @Override
    protected void initVariablesAndService() {

    }

    @Override
    protected void initViews(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
    }
}

activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="主页"
        android:textSize="24sp"
        android:layout_centerInParent="true"/>
</RelativeLayout>

这个时候肯定是运行不起来的,因为还没有到manifests里注册页面

<activity android:name=".activity.RegisterActivity"/>
<activity android:name=".activity.MainActivity"/>

完事,最终的结果就出来了

今天就到这了

android 练习之路 (三)