由于在公司被安排到android开发的工作任务,而且以前没有接触过安卓开发,所以只能去摸索一下了。接下来是我分享给大家的一个学习过程中的小案例:android实现登录注册
先给大家上实现的效果图:
我所使用的开发工具是Android Studio,下面展示的是我这个案例的结构图:
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,接下来是具体的配置内容:
implementation 'org.litepal.android:java:3.0.0'
<?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>
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);
}
}
<?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,请在下面评论,我尽自己所能帮大家解决,也希望那些大神能够理解,我也是个刚进这个行业的小白,有什么不对的地方可以指出来,我会及时修改。接下来附上我的源码下载地址:下载地址