EChat(简易聊天项目)一、登录注册实现
2018-02-24 21:27
411 查看
具体实现代码:
① 活动LoginActivity(负责登录界面)package com.example.androidlogin;
import android.content.Intent;
import android.inputmethodservice.KeyboardView;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.litepal.crud.DataSupport;
import java.util.List;
import java.util.Map;
/*
程序启动时显示的第一个活动界面,即为登陆页面
*/
public class LoginActivity extends AppCompatActivity {
//用户名文本编辑框
private EditText username;
//密码文本编辑框
private EditText password;
//登录按钮
private Button login;
//定义Intent对象,用来连接两个Activity
private Intent intent;
//重写的方法,启动一个Activity时,此方法会自动调用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将正在创建的活动添加到活动管理器里
ActivityCollector.addActivity(this);
//设置布局
setContentView(R.layout.login_layout);
//得到登录按钮对象
Button login = (Button)findViewById(R.id.login);
Button regist = (Button)findViewById(R.id.regist);
//给登录按钮设置监听器
login.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//得到用户名和密码的编辑框
username = (EditText)findViewById(R.id.username);
password = (EditText)findViewById(R.id.password);
//判断是否成功匹配的标志
boolean flag = false;
//LitePal里遍历查询所有数据的方法
List<User> users = DataSupport.findAll(User.class);
for (User user : users){
//判断用户输入的用户名和密码是否与数据库中相同
if(user.getUsername().equals(username.getText().toString())&&
user.getPassword().equals(password.getText().toString())) {
flag = true;
}}
if(flag){
//创建Intent对象,传入源Activity和目的Activity的类对象
Intent intent = new Intent(LoginActivity.this, SuccessActivity.class);
//传递用户名到下一活动,用于显示
String USERNAME = username.getText().toString();
intent.putExtra("userName",USERNAME);
//启动Activity
startActivity(intent);
}else{
//登录信息错误,通过Toast显示提示信息
Toast.makeText(LoginActivity.this,"用户登录信息错误" , Toast.LENGTH_SHORT).show();
}
}
});
regist.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(LoginActivity.this,RegistActivity.class);
startActivity(intent);
}
});
}
//表明一个要销毁的活动从活动管理器里移除
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
//创建Option菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//定义菜单响应事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.exit://当点击了退出时,退出程序
//销毁所有活动
ActivityCollector.finishAll();
//杀掉当前进程
android.os.Process.killProcess(android.os.Process.myPid());
break;
default:
}
return true;
}
}② 布局文件loginlayout(主体为几个控件,采用相对布局便于在视图中进行细致位置调整)<?xml version="1.0" encoding="utf-8"?>
<!-- 此Activity采用相对布局 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="250dp"
android:layout_height="154dp"
android:layout_gravity="center"
android:src="@drawable/timg"
android:layout_weight="0.22" />
<TextView
android:id="@+id/title"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="登录页面"
android:textColor="#000"
android:textSize="30dip"
android:layout_marginLeft="18dp"
android:layout_marginStart="18dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="13dp" />
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="用户名"
android:layout_alignBaseline="@+id/username"
android:layout_alignBottom="@+id/username"
android:layout_alignRight="@+id/user_password"
android:layout_alignEnd="@+id/user_password" />
<!-- 文本编辑框 -->
<TextView
android:id="@+id/user_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="密码"
android:layout_marginRight="33dp"
android:layout_marginEnd="33dp"
android:layout_alignBaseline="@+id/password"
android:layout_alignBottom="@+id/password"
android:layout_toLeftOf="@+id/password"
android:layout_toStartOf="@+id/password" />
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:textSize="20dip"
android:id="@+id/username"
android:layout_marginTop="31dp"
android:layout_below="@+id/title"
android:layout_alignLeft="@+id/password"
android:layout_alignStart="@+id/password"
android:maxLines="1"
android:hint="username"/>
<!-- maxLines设置EditText最大行数,hint设置提示性文本 -->
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:textSize="20dip"
android:id="@+id/password"
android:layout_marginRight="62dp"
android:layout_marginEnd="62dp"
android:layout_marginTop="16dp"
android:layout_below="@+id/username"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:maxLines="1"
android:hint="password"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20dip"
android:text="登录"
android:id="@+id/login"
android:layout_marginLeft="28dp"
android:layout_marginStart="28dp"
android:layout_centerVertical="true"
android:layout_alignLeft="@+id/user_password"
android:layout_alignStart="@+id/user_password" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/regist"
android:textSize="20dip"
android:text="注册"
android:layout_alignBaseline="@+id/login"
android:layout_alignBottom="@+id/login"
android:layout_alignRight="@+id/password"
android:layout_alignEnd="@+id/password"
android:layout_marginRight="18dp"
android:layout_marginEnd="18dp" />
</RelativeLayout>③ 活动SuccessActivity(负责登录成功提示页面)package com.example.androidlogin;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
/*
登陆成功进入的页面
*/
public class SuccessActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将正在创建的活动添加到活动管理器中
ActivityCollector.addActivity(this);
setContentView(R.layout.success__layout);
TextView username = (TextView)findViewById(R.id.su);
Intent intent = getIntent();
String user_name = intent.getStringExtra("userName");
username.setText("欢迎:"+
user_name);
}
//表明一个要销毁的活动从活动管理器里移除
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
//创建Option菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//定义菜单响应事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.exit://当点击了退出时,退出程序
ActivityCollector.finishAll();
android.os.Process.killProcess(android.os.Process.myPid());
break;
default:
}
return true;
}
}④ 布局文件success_layout<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/su"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#2d2e22"
android:textSize="50dip"/>
</LinearLayout>⑤ 活动RegistActivity(负责注册界面)package com.example.androidlogin;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.litepal.LitePal;
import org.litepal.crud.DataSupport;
import org.litepal.tablemanager.Connector;
import java.util.List;
public class RegistActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将一个正在创建的活动添加到活动管理器中
ActivityCollector.addActivity(this);
setContentView(R.layout.regist_layout);
Button yes = (Button) findViewById(R.id.YES);
Button no =(Button) findViewById(R.id.NO);
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText username = (EditText)findViewById(R.id.username);
EditText password = (EditText)findViewById(R.id.password);
//判断用户注册是否输入了密码和用户名
//首先学会如何判断EditText中内容为空,要包含trim(去掉首部空格)
if (username.getText().length()==0||password.getText().length() == 0){
Toast.makeText(RegistActivity.this,"用户名和密码不能为空" , Toast.LENGTH_SHORT).show();
}else {
//判断是否已经注册了相同用户名
boolean flag = false;
List<User> users = DataSupport.findAll(User.class);
for(User user : users){
if(username.equals(user.getUsername())){
flag = true;
}
}
if(flag) {
Toast.makeText(RegistActivity.this,"该用户名已经注册",Toast.LENGTH_SHORT).show();
}else {
//新建LitePal数据库
Connector.getDatabase();
User user = new User();
String strusername=username.getText().toString();
String strpassword=password.getText().toString();
//存储用户名密码
user.setUsername(strusername);
user.setPassword(strpassword);
user.save();
Toast.makeText(RegistActivity.this,"创建用户成功",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(RegistActivity.this,SuccessActivity.class);
startActivity(intent);
}
}
}
});
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RegistActivity.this,LoginActivity.class);
startActivity(intent);
}
});
}
//表明一个要销毁的活动从活动管理器里移除
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
//创建Option菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//定义菜单响应事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.exit://当点击了退出时,退出程序
ActivityCollector.finishAll();
android.os.Process.killProcess(android.os.Process.myPid());
break;
default:
}
return true;
}
}
⑥ 布局文件regist_layout<?xml version="1.0" encoding="utf-8"?>
<!-- 此Activity采用相对布局 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- TextView相当于Java中的标签组件,下面是对其属性的设置 -->
<TextView
android:id="@+id/title"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="注册页面"
android:textColor="#000"
android:textSize="30dip"
android:layout_marginLeft="18dp"
android:layout_marginStart="18dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="13dp" />
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="用户名"
android:layout_alignBaseline="@+id/username"
android:layout_alignBottom="@+id/username"
android:layout_alignRight="@+id/user_password"
android:layout_alignEnd="@+id/user_password" />
<!-- 文本编辑框 -->
<TextView
android:id="@+id/user_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="密码"
android:layout_marginRight="33dp"
android:layout_marginEnd="33dp"
android:layout_alignBaseline="@+id/password"
android:layout_alignBottom="@+id/password"
android:layout_toLeftOf="@+id/password"
android:layout_toStartOf="@+id/password" />
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:textSize="20dip"
android:id="@+id/username"
android:layout_marginTop="31dp"
android:layout_below="@+id/title"
android:layout_alignLeft="@+id/password"
android:layout_alignStart="@+id/password"
android:maxLines="1"
android:hint="username"/>
<!-- maxLines设置EditText最大行数,hint设置提示性文本 -->
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:textSize="20dip"
android:id="@+id/password"
android:layout_marginRight="62dp"
android:layout_marginEnd="62dp"
android:layout_marginTop="16dp"
android:layout_below="@+id/username"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:maxLines="1"
android:hint="password"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20dip"
android:text="确定"
android:id="@+id/YES"
android:layout_centerVertical="true"
android:layout_alignLeft="@+id/user_password"
android:layout_alignStart="@+id/user_password"
android:layout_marginLeft="26dp"
android:layout_marginStart="26dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/NO"
android:textSize="20dip"
android:text="取消"
android:layout_alignBaseline="@+id/YES"
android:layout_alignBottom="@+id/YES"
android:layout_alignRight="@+id/password"
android:layout_alignEnd="@+id/password"
android:layout_marginRight="18dp"
android:layout_marginEnd="18dp" />
</RelativeLayout>
⑦ 菜单menu/main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/exit"
android:title="退出"/>
</menu>
⑧ 活动管理类ActivityCollectorpackage com.example.androidlogin;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Enjoy life on 2017/9/24.
*/
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for (Activity activity : activities){
if (!activity.isFinishing()){
activity.finish();
}
}
activities.clear();
}
}
⑨ AndroidManifest.xml
------------------以下代码主要为 LitePal数据库的配置------------------
① app/build.gradle中添加对LitePal数据库的支持dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'org.litepal.android:core:1.4.1'
testCompile 'junit:junit:4.12'
}
② main目录下新建一个assets目录,然后在assets目录下再新建一个litepal.xml文件<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="UserInfo"></dbname>
<version value="1"></version>
<list>
<mapping class="com.example.androidlogin.User"></mapping>
</list>
</litepal>
③ AndroidMainfest.xml中已经添加 android:name="org.litepal.LitePalApplication"
④ 新建User类(用来存储用户信息)package com.example.androidlogin;
import org.litepal.crud.DataSupport;
/**
* Created by Enjoy life on 2017/10/2.
*/
public class User extends DataSupport{
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
运行结果:
LoginActivity SuccessActivity RegistActivity
①在登录页面若输入用户名和密码成功进入提示页面(密码错误弹出提示);点击注册进入注册页面(没有用户名密码需先去注册页面创建用户,用户信息保存在数据库中用于下次登录)
密码错误提示 注册信息为空提示
②注册页面输入完用户名和密码点击确定直接进入提示页面,而点击取消则回到登录页面(若输入用户名和密码为空则报错)
③在任何一个页面点击Option菜单的退出会直接退出程序
① 活动LoginActivity(负责登录界面)package com.example.androidlogin;
import android.content.Intent;
import android.inputmethodservice.KeyboardView;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.litepal.crud.DataSupport;
import java.util.List;
import java.util.Map;
/*
程序启动时显示的第一个活动界面,即为登陆页面
*/
public class LoginActivity extends AppCompatActivity {
//用户名文本编辑框
private EditText username;
//密码文本编辑框
private EditText password;
//登录按钮
private Button login;
//定义Intent对象,用来连接两个Activity
private Intent intent;
//重写的方法,启动一个Activity时,此方法会自动调用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将正在创建的活动添加到活动管理器里
ActivityCollector.addActivity(this);
//设置布局
setContentView(R.layout.login_layout);
//得到登录按钮对象
Button login = (Button)findViewById(R.id.login);
Button regist = (Button)findViewById(R.id.regist);
//给登录按钮设置监听器
login.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//得到用户名和密码的编辑框
username = (EditText)findViewById(R.id.username);
password = (EditText)findViewById(R.id.password);
//判断是否成功匹配的标志
boolean flag = false;
//LitePal里遍历查询所有数据的方法
List<User> users = DataSupport.findAll(User.class);
for (User user : users){
//判断用户输入的用户名和密码是否与数据库中相同
if(user.getUsername().equals(username.getText().toString())&&
user.getPassword().equals(password.getText().toString())) {
flag = true;
}}
if(flag){
//创建Intent对象,传入源Activity和目的Activity的类对象
Intent intent = new Intent(LoginActivity.this, SuccessActivity.class);
//传递用户名到下一活动,用于显示
String USERNAME = username.getText().toString();
intent.putExtra("userName",USERNAME);
//启动Activity
startActivity(intent);
}else{
//登录信息错误,通过Toast显示提示信息
Toast.makeText(LoginActivity.this,"用户登录信息错误" , Toast.LENGTH_SHORT).show();
}
}
});
regist.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(LoginActivity.this,RegistActivity.class);
startActivity(intent);
}
});
}
//表明一个要销毁的活动从活动管理器里移除
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
//创建Option菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//定义菜单响应事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.exit://当点击了退出时,退出程序
//销毁所有活动
ActivityCollector.finishAll();
//杀掉当前进程
android.os.Process.killProcess(android.os.Process.myPid());
break;
default:
}
return true;
}
}② 布局文件loginlayout(主体为几个控件,采用相对布局便于在视图中进行细致位置调整)<?xml version="1.0" encoding="utf-8"?>
<!-- 此Activity采用相对布局 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="250dp"
android:layout_height="154dp"
android:layout_gravity="center"
android:src="@drawable/timg"
android:layout_weight="0.22" />
<TextView
android:id="@+id/title"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="登录页面"
android:textColor="#000"
android:textSize="30dip"
android:layout_marginLeft="18dp"
android:layout_marginStart="18dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="13dp" />
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="用户名"
android:layout_alignBaseline="@+id/username"
android:layout_alignBottom="@+id/username"
android:layout_alignRight="@+id/user_password"
android:layout_alignEnd="@+id/user_password" />
<!-- 文本编辑框 -->
<TextView
android:id="@+id/user_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="密码"
android:layout_marginRight="33dp"
android:layout_marginEnd="33dp"
android:layout_alignBaseline="@+id/password"
android:layout_alignBottom="@+id/password"
android:layout_toLeftOf="@+id/password"
android:layout_toStartOf="@+id/password" />
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:textSize="20dip"
android:id="@+id/username"
android:layout_marginTop="31dp"
android:layout_below="@+id/title"
android:layout_alignLeft="@+id/password"
android:layout_alignStart="@+id/password"
android:maxLines="1"
android:hint="username"/>
<!-- maxLines设置EditText最大行数,hint设置提示性文本 -->
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:textSize="20dip"
android:id="@+id/password"
android:layout_marginRight="62dp"
android:layout_marginEnd="62dp"
android:layout_marginTop="16dp"
android:layout_below="@+id/username"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:maxLines="1"
android:hint="password"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20dip"
android:text="登录"
android:id="@+id/login"
android:layout_marginLeft="28dp"
android:layout_marginStart="28dp"
android:layout_centerVertical="true"
android:layout_alignLeft="@+id/user_password"
android:layout_alignStart="@+id/user_password" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/regist"
android:textSize="20dip"
android:text="注册"
android:layout_alignBaseline="@+id/login"
android:layout_alignBottom="@+id/login"
android:layout_alignRight="@+id/password"
android:layout_alignEnd="@+id/password"
android:layout_marginRight="18dp"
android:layout_marginEnd="18dp" />
</RelativeLayout>③ 活动SuccessActivity(负责登录成功提示页面)package com.example.androidlogin;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
/*
登陆成功进入的页面
*/
public class SuccessActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将正在创建的活动添加到活动管理器中
ActivityCollector.addActivity(this);
setContentView(R.layout.success__layout);
TextView username = (TextView)findViewById(R.id.su);
Intent intent = getIntent();
String user_name = intent.getStringExtra("userName");
username.setText("欢迎:"+
user_name);
}
//表明一个要销毁的活动从活动管理器里移除
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
//创建Option菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//定义菜单响应事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.exit://当点击了退出时,退出程序
ActivityCollector.finishAll();
android.os.Process.killProcess(android.os.Process.myPid());
break;
default:
}
return true;
}
}④ 布局文件success_layout<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/su"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#2d2e22"
android:textSize="50dip"/>
</LinearLayout>⑤ 活动RegistActivity(负责注册界面)package com.example.androidlogin;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.litepal.LitePal;
import org.litepal.crud.DataSupport;
import org.litepal.tablemanager.Connector;
import java.util.List;
public class RegistActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将一个正在创建的活动添加到活动管理器中
ActivityCollector.addActivity(this);
setContentView(R.layout.regist_layout);
Button yes = (Button) findViewById(R.id.YES);
Button no =(Button) findViewById(R.id.NO);
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText username = (EditText)findViewById(R.id.username);
EditText password = (EditText)findViewById(R.id.password);
//判断用户注册是否输入了密码和用户名
//首先学会如何判断EditText中内容为空,要包含trim(去掉首部空格)
if (username.getText().length()==0||password.getText().length() == 0){
Toast.makeText(RegistActivity.this,"用户名和密码不能为空" , Toast.LENGTH_SHORT).show();
}else {
//判断是否已经注册了相同用户名
boolean flag = false;
List<User> users = DataSupport.findAll(User.class);
for(User user : users){
if(username.equals(user.getUsername())){
flag = true;
}
}
if(flag) {
Toast.makeText(RegistActivity.this,"该用户名已经注册",Toast.LENGTH_SHORT).show();
}else {
//新建LitePal数据库
Connector.getDatabase();
User user = new User();
String strusername=username.getText().toString();
String strpassword=password.getText().toString();
//存储用户名密码
user.setUsername(strusername);
user.setPassword(strpassword);
user.save();
Toast.makeText(RegistActivity.this,"创建用户成功",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(RegistActivity.this,SuccessActivity.class);
startActivity(intent);
}
}
}
});
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RegistActivity.this,LoginActivity.class);
startActivity(intent);
}
});
}
//表明一个要销毁的活动从活动管理器里移除
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
//创建Option菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//定义菜单响应事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.exit://当点击了退出时,退出程序
ActivityCollector.finishAll();
android.os.Process.killProcess(android.os.Process.myPid());
break;
default:
}
return true;
}
}
⑥ 布局文件regist_layout<?xml version="1.0" encoding="utf-8"?>
<!-- 此Activity采用相对布局 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- TextView相当于Java中的标签组件,下面是对其属性的设置 -->
<TextView
android:id="@+id/title"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="注册页面"
android:textColor="#000"
android:textSize="30dip"
android:layout_marginLeft="18dp"
android:layout_marginStart="18dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="13dp" />
<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="用户名"
android:layout_alignBaseline="@+id/username"
android:layout_alignBottom="@+id/username"
android:layout_alignRight="@+id/user_password"
android:layout_alignEnd="@+id/user_password" />
<!-- 文本编辑框 -->
<TextView
android:id="@+id/user_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="密码"
android:layout_marginRight="33dp"
android:layout_marginEnd="33dp"
android:layout_alignBaseline="@+id/password"
android:layout_alignBottom="@+id/password"
android:layout_toLeftOf="@+id/password"
android:layout_toStartOf="@+id/password" />
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:textSize="20dip"
android:id="@+id/username"
android:layout_marginTop="31dp"
android:layout_below="@+id/title"
android:layout_alignLeft="@+id/password"
android:layout_alignStart="@+id/password"
android:maxLines="1"
android:hint="username"/>
<!-- maxLines设置EditText最大行数,hint设置提示性文本 -->
<EditText
android:layout_width="200dip"
android:layout_height="wrap_content"
android:textSize="20dip"
android:id="@+id/password"
android:layout_marginRight="62dp"
android:layout_marginEnd="62dp"
android:layout_marginTop="16dp"
android:layout_below="@+id/username"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:maxLines="1"
android:hint="password"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20dip"
android:text="确定"
android:id="@+id/YES"
android:layout_centerVertical="true"
android:layout_alignLeft="@+id/user_password"
android:layout_alignStart="@+id/user_password"
android:layout_marginLeft="26dp"
android:layout_marginStart="26dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/NO"
android:textSize="20dip"
android:text="取消"
android:layout_alignBaseline="@+id/YES"
android:layout_alignBottom="@+id/YES"
android:layout_alignRight="@+id/password"
android:layout_alignEnd="@+id/password"
android:layout_marginRight="18dp"
android:layout_marginEnd="18dp" />
</RelativeLayout>
⑦ 菜单menu/main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/exit"
android:title="退出"/>
</menu>
⑧ 活动管理类ActivityCollectorpackage com.example.androidlogin;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Enjoy life on 2017/9/24.
*/
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for (Activity activity : activities){
if (!activity.isFinishing()){
activity.finish();
}
}
activities.clear();
}
}
⑨ AndroidManifest.xml
?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidlogin"> <application android:name="org.litepal.LitePalApplication" 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=".LoginActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SuccessActivity" android:launchMode="singleTask"/> <activity android:name=".RegistActivity" android:launchMode="singleTask"></activity> </application> </manifest>
------------------以下代码主要为 LitePal数据库的配置------------------
① app/build.gradle中添加对LitePal数据库的支持dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'org.litepal.android:core:1.4.1'
testCompile 'junit:junit:4.12'
}
② main目录下新建一个assets目录,然后在assets目录下再新建一个litepal.xml文件<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="UserInfo"></dbname>
<version value="1"></version>
<list>
<mapping class="com.example.androidlogin.User"></mapping>
</list>
</litepal>
③ AndroidMainfest.xml中已经添加 android:name="org.litepal.LitePalApplication"
④ 新建User类(用来存储用户信息)package com.example.androidlogin;
import org.litepal.crud.DataSupport;
/**
* Created by Enjoy life on 2017/10/2.
*/
public class User extends DataSupport{
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
运行结果:
LoginActivity SuccessActivity RegistActivity
①在登录页面若输入用户名和密码成功进入提示页面(密码错误弹出提示);点击注册进入注册页面(没有用户名密码需先去注册页面创建用户,用户信息保存在数据库中用于下次登录)
密码错误提示 注册信息为空提示
②注册页面输入完用户名和密码点击确定直接进入提示页面,而点击取消则回到登录页面(若输入用户名和密码为空则报错)
③在任何一个页面点击Option菜单的退出会直接退出程序
相关文章推荐
- EChat(简易聊天项目)六、实现记住密码和自动登录
- java在线聊天项目1.2版 ——开启多个客户端,分别实现数据库注册和登录功能后,成功登陆则登录框消失,好友列表窗出现
- EChat(简易聊天项目)八、Socket实现即时通信(包括部分修改)
- java在线聊天项目 swt可视化窗口Design 登录框注册按钮点击改变窗口大小——出现注册面板 实现打开登录框时屏幕居中
- EChat(简易聊天项目)二、好友列表实现
- EChat(简易聊天项目)三、聊天界面UI实现
- java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并
- Android实战简易教程-第三十二枪(自定义View登录注册界面EditText-实现一键清空)
- BBS项目笔记之十:登录和注册模块的前台实现
- android XMPP实现IM聊天一(登录和注册)
- 项目实训-千寻-登录注册与个人中心的实现
- 利用简易Tomcat服务器结合MysqL实现Android手机注册与登录(客户端部分)
- Android实战简易教程-第三十二枪(自定义View登录注册界面EditText-实现一键清空)
- yii2项目实战-用户管理之登录与注册功能实现
- 简易 的QQ APP登录以及注册页面的实现
- EChat(简易聊天项目)四、模拟强制下线
- 记录我的第一个用ssh框架开发的web项目——实现简单的登录注册以及增删查改(一)
- 用Hibernate与Struts实现简单的项目的登录与注册
- 用Java实现的简易聊天系统(J2SE初学者练手项目)
- EChat(简易聊天项目)五、存储聊天记录中的图片