Android实现登录和注册

由于在公司被安排到android开发的工作任务,而且以前没有接触过安卓开发,所以只能去摸索一下了。接下来是我分享给大家的一个学习过程中的小案例:android实现登录注册

先给大家上实现的效果图:

Android实现登录和注册_第1张图片Android实现登录和注册_第2张图片
Android实现登录和注册_第3张图片

代码具体实现

我所使用的开发工具是Android Studio,下面展示的是我这个案例的结构图:
Android实现登录和注册_第4张图片

  1. 几个具体的Activity代码

package com.e.userinfo;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

import androidx.appcompat.app.AppCompatActivity;

import org.litepal.LitePal;

import java.util.List;

/**
 * 用户登录
 */
public class Login extends AppCompatActivity implements View.OnClickListener {
    private EditText mAccount;                        //用户名编辑
    private EditText mPwd;                            //密码编辑
    private Button mRegisterButton;                   //注册按钮
    private Button mLoginButton;                      //登录按钮
    private CheckBox mRememberCheck;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        //通过id找到按钮
        mRegisterButton = (Button) findViewById(R.id.login_btn_register);
        mLoginButton = (Button) findViewById(R.id.login_btn_login);
        //通过id找到editText的值
        mAccount = (EditText) findViewById(R.id.login_edit_account);
        mPwd = (EditText) findViewById(R.id.login_edit_pwd);
        //监听按钮
        mRegisterButton.setOnClickListener(this);
        mLoginButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.login_btn_login://这个是登录按钮
                login();
                break;
            case R.id.login_btn_register://这个是注册按钮
                Intent intent_Login_to_Register = new Intent(Login.this,Register.class) ;    //切换Login Activity至User Activity
                startActivity(intent_Login_to_Register);
                break;
        }
    }

    /**
     * 登录
     */
    public void login() {
        String user=mAccount.getText().toString().trim();//获取用户名
        String pwd=mPwd.getText().toString().trim();     //获取密码
        List<UserInfo> list= LitePal.where(" userName = ? and userPwd = ?",user,pwd).find(UserInfo.class);
        if (list.size()>0){//登录成功
            Intent intent = new Intent(Login.this,InfoActivity.class) ;//切换界面
            intent.putExtra("userName",user);//将用户名传到InfoActivity
            startActivity(intent);
            Toast.makeText(this,"登录成功",
                       Toast.LENGTH_SHORT).show();
        }else{//登录失败
            Toast.makeText(this,"登录失败",
                       Toast.LENGTH_SHORT).show();
        }
    }

    public boolean isUserNameAndPwdValid() {
        String userName = mAccount.getText().toString().trim();    //获取当前输入的用户名和密码信息
        String userPwd = mPwd.getText().toString().trim();
        if (userName.equals("")) { //用户名为空
            Toast.makeText(this,"用户名不能为空",
                    Toast.LENGTH_SHORT).show();
            return false;
        } else if (userPwd.equals("")) {
            Toast.makeText(this, "密码不能为空",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}

上面是Login中的代码,接下来是Register的代码

package com.e.userinfo;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import org.litepal.LitePal;

/**
 * 用户注册
 */
public class Register extends AppCompatActivity implements View.OnClickListener {
    private EditText mAccount;                        //用户名编辑
    private EditText mPwd;                            //密码编辑
    private EditText mPwdCheck;                       //密码编辑
    private Button mSureButton;                       //确定按钮
    private Button mCancelButton;                     //取消按钮

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);
        //找到按钮
        mSureButton = (Button) findViewById(R.id.register_btn_sure);
        mCancelButton = (Button) findViewById(R.id.register_btn_cancel);

        //找到editText的值
        mAccount = (EditText) findViewById(R.id.resetpwd_edit_name);
        mPwd = (EditText) findViewById(R.id.resetpwd_edit_pwd_old);
        mPwdCheck = (EditText) findViewById(R.id.resetpwd_edit_pwd_new);
        //监听按钮
        mSureButton.setOnClickListener(this);      //注册界面两个按钮的监听事件
        mCancelButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.register_btn_sure:                       //确认按钮的监听事件
                register();
                break;
            case R.id.register_btn_cancel:                     //取消按钮的监听事件,由注册界面返回登录界面
                Intent intent_Register_to_Login = new Intent(Register.this, Login.class);    //切换User Activity至Login Activity
                startActivity(intent_Register_to_Login);
                finish();
                break;
        }
    }

    /**
     * 注册
     */
    public void register() {
        if (isUserNameAndPwdValid()) {
            String userName = mAccount.getText().toString().trim();
            String userPwd = mPwd.getText().toString().trim();
            long id = System.currentTimeMillis();
            boolean isExist = LitePal.isExist(UserInfo.class, "userName = ? and userPwd = ?", userName, userPwd);
            if (isExist) {//用户已经存在
                Toast.makeText(this, "用户已经存在,不能重复注册",
                        Toast.LENGTH_SHORT).show();
                return;
            }
            UserInfo userInfo = new UserInfo(userName, userPwd, id);
            boolean flag = userInfo.save();//保存数据
            if (flag) {//保存数据成功
                Toast.makeText(this,"注册成功",
                      Toast.LENGTH_SHORT).show();
                Intent intent_Register_to_Login = new Intent(Register.this, Login.class);    //切换User Activity至Login Activity
                startActivity(intent_Register_to_Login);
                finish();
            }else{
                Toast.makeText(this,"注册失败", Toast.LENGTH_SHORT).show();
            }
        }
    }

    public boolean isUserNameAndPwdValid() {
        String userName = mAccount.getText().toString().trim();    //获取当前输入的用户名和密码信息
        String userPwd = mPwd.getText().toString().trim();
        if (userName.equals("")) { //用户名为空
            Toast.makeText(this, "用户名不能为空",
                    Toast.LENGTH_SHORT).show();
            return false;
        } else if (userPwd.equals("")) {
            Toast.makeText(this, "密码不能为空",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }

    @Override
    protected void onResume() {

        super.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }
}

接下来是InfoActivity的代码

package com.e.userinfo;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

/**
 * 展示用户信息
 */
public class InfoActivity  extends AppCompatActivity {
    private TextView tv1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.info);
        tv1=findViewById(R.id.info_welcome);
        Intent getData=getIntent();
        Bundle bundle=getData.getExtras();//.getExtras()得到intent所附带的值
        String userName=bundle.getString("userName");//通过key获取相应的value
        tv1.setText("欢迎您:" +userName);//给页面赋值

    }
}

2.实体类代码

package com.e.userinfo;

import org.litepal.crud.LitePalSupport;

/**
 * 用户信息
 */
public class UserInfo extends LitePalSupport {
    private String userName;                  //用户名
    private String userPwd;                   //用户密码
    private long id;                       //用户ID号

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public UserInfo(String userName, String userPwd, long id) {
        this.userName = userName;
        this.userPwd = userPwd;
        this.id = id;
    }

    public UserInfo() {
    }
}

3.数据库配置
在这个案例中我所用到的数据库是litepal,接下来是具体的配置内容:

  • 首先要在build.gradle中引入依赖:
implementation 'org.litepal.android:java:3.0.0'
  • 然后需要新建一个包,里面包含一个名为litepal.xml的文件
    Android实现登录和注册_第5张图片
  • xml文件具体内容如下:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
        <dbname value="user" ></dbname> //数据库名称

        <version value="1" ></version>  //数据库版本号

        <list>
            <mapping class="com.e.userinfo.UserInfo"></mapping> //用于设定所有的映射模型,即你定义数据库表的类名路径

        </list>
</litepal>
  • MyApp类内容:
package com.e.userinfo;

import android.app.Application;

import org.litepal.LitePal;

public class MyApp  extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
}

  • 最后不要忘了在AndroidManifest.xml里面加入以下内容:
    在这里插入图片描述
  • 下面直接附上我的AndroidManifest.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.e.userinfo">

    <application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="用户信息管理"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".Login"
            android:label="用户登录" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".InfoActivity" android:label="用户信息"></activity>
        <activity android:name=".Register" android:label="用户注册"></activity>
    </application>
</manifest>

4.layout下的几个xml文件代码如下:
login.xml文件内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="15dp"
    android:background="@mipmap/loginback"><!--此处的背景图可自行添加到mipmap下 -->
    >
    <RelativeLayout
        android:id="@+id/login_view"
        android:layout_width="400dp"
        android:layout_height="800dp"
        android:layout_centerInParent="true"
        >

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="注册"
            android:id="@+id/login_btn_register"
            android:textColor="#ffffff"
            android:background="#e52525"
            android:textSize="20dp"
            android:layout_below="@+id/login_btn_login"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="10dp" />

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="登录"
            android:id="@+id/login_btn_login"
            android:background="#545bcb"
            android:textSize="20dp"
            android:textColor="#ffffff"
            android:layout_below="@+id/login_edit_pwd"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="52dp" />

        <EditText
            android:layout_width="400dp"
            android:layout_height="60dp"
            android:inputType="textPassword"
            android:ems="10"
            android:id="@+id/login_edit_pwd"
            android:drawableLeft="@mipmap/pwd"
            android:hint="请输入您的密码"
            android:textColor="#ffff00"
            android:layout_below="@+id/login_edit_account"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <EditText
            android:layout_width="400dp"
            android:layout_height="60dp"
            android:inputType="textPersonName"
            android:id="@+id/login_edit_account"
            android:drawableLeft="@mipmap/username"
            android:hint="请输入您的用户名"
            android:textColor="#ffff00"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="20dp" />

        <CheckBox
            android:layout_width="100dp"
            android:layout_height="20dp"
            android:text="记住密码"
            android:id="@+id/Login_Remember"
            android:layout_below="@+id/login_edit_pwd"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:checked="false"
            android:textSize="15dp" />

        <TextView
            android:layout_width="65dp"
            android:layout_height="20dp"
            android:text="忘记密码"
            android:id="@+id/login_text_change_pwd"
            android:layout_below="@+id/login_edit_pwd"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:textSize="15dp" />
    </RelativeLayout>
</LinearLayout>

register.xml文件内容

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

    <RelativeLayout
        android:id="@+id/login_view"
        android:layout_width="400dp"
        android:layout_height="800dp"
        android:layout_centerInParent="true">

        <EditText
            android:id="@+id/resetpwd_edit_name"
            android:layout_width="400dp"
            android:layout_height="60dp"
            android:layout_alignStart="@+id/resetpwd_edit_pwd_new"
            android:layout_alignLeft="@+id/resetpwd_edit_pwd_new"
            android:layout_alignEnd="@+id/resetpwd_edit_pwd_new"
            android:layout_alignRight="@+id/resetpwd_edit_pwd_new"
            android:layout_alignParentTop="true"
            android:drawableLeft="@mipmap/username"
            android:ems="10"
            android:hint="请输入您的用户名"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/resetpwd_edit_pwd_old"
            android:layout_width="400dp"
            android:layout_height="60dp"
            android:layout_below="@+id/resetpwd_edit_name"
            android:layout_alignStart="@+id/resetpwd_edit_name"
            android:layout_alignLeft="@+id/resetpwd_edit_name"
            android:layout_alignEnd="@+id/resetpwd_edit_name"
            android:layout_alignRight="@+id/resetpwd_edit_name"
            android:drawableLeft="@mipmap/pwd"
            android:ems="10"
            android:hint="请输入您的密码"
            android:inputType="textPassword" />


        <EditText
            android:id="@+id/resetpwd_edit_pwd_new"
            android:layout_width="fill_parent"
            android:layout_height="60dp"
            android:layout_below="@+id/resetpwd_edit_pwd_old"
            android:layout_centerHorizontal="true"
            android:drawableLeft="@mipmap/pwd"
            android:ems="10"
            android:hint="请确认您的密码"
            android:inputType="textPassword" />

        <Button
            android:id="@+id/register_btn_cancel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/register_btn_sure"
            android:layout_alignStart="@+id/register_btn_sure"
            android:layout_alignLeft="@+id/register_btn_sure"
            android:layout_marginTop="10dp"
            android:background="#f71818"
            android:text="取消"
            android:textSize="20dp" />

        <Button
            android:id="@+id/register_btn_sure"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/resetpwd_edit_pwd_new"
            android:layout_alignStart="@+id/resetpwd_edit_pwd_new"
            android:layout_alignLeft="@+id/resetpwd_edit_pwd_new"
            android:layout_marginTop="20dp"
            android:background="#1cf718"
            android:text="确定"
            android:textSize="20dp" />
    </RelativeLayout>
</LinearLayout>

info.xml文件内容

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

    <TextView
        android:id="@+id/info_welcome"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text"
        android:textSize="30sp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

</LinearLayout>

源码下载

这是我自己第一次接触安卓开发,如果碰到一些不懂的或者bug,请在下面评论,我尽自己所能帮大家解决,也希望那些大神能够理解,我也是个刚进这个行业的小白,有什么不对的地方可以指出来,我会及时修改。接下来附上我的源码下载地址:下载地址

你可能感兴趣的:(Android学习,android,数据库)