具体实现代码:

① 活动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对象,用来连接两个Activityprivate Intent intent;//重写的方法,启动一个Activity时,此方法会自动调用@Overridepublic 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);//启动ActivitystartActivity(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);}});}//表明一个要销毁的活动从活动管理器里移除@Overrideprotected void onDestroy() {super.onDestroy();ActivityCollector.removeActivity(this);}//创建Option菜单@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main,menu);return true;}//定义菜单响应事件@Overridepublic 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"
><ImageViewandroid:layout_width="250dp"android:layout_height="154dp"android:layout_gravity="center"android:src="@drawable/timg"android:layout_weight="0.22" /><TextViewandroid: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" /><TextViewandroid: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" /><!-- 文本编辑框 --><TextViewandroid: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" /><EditTextandroid: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设置提示性文本 --><EditTextandroid: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"/><Buttonandroid: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" /><Buttonandroid: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 {@Overrideprotected 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);}//表明一个要销毁的活动从活动管理器里移除@Overrideprotected void onDestroy() {super.onDestroy();ActivityCollector.removeActivity(this);}//创建Option菜单@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main,menu);return true;}//定义菜单响应事件@Overridepublic 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" ><TextViewandroid: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 {@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic void onClick(View v) {Intent intent = new Intent(RegistActivity.this,LoginActivity.class);startActivity(intent);}});}//表明一个要销毁的活动从活动管理器里移除@Overrideprotected void onDestroy() {super.onDestroy();ActivityCollector.removeActivity(this);}//创建Option菜单@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main,menu);return true;}//定义菜单响应事件@Overridepublic 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中的标签组件,下面是对其属性的设置 --><TextViewandroid: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" /><TextViewandroid: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" /><!-- 文本编辑框 --><TextViewandroid: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" /><EditTextandroid: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设置提示性文本 --><EditTextandroid: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"/><Buttonandroid: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" /><Buttonandroid: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">
<itemandroid:id="@+id/exit"android:title="退出"/>
</menu>

 

⑧ 活动管理类ActivityCollector

package 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"><applicationandroid: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(简易聊天项目)一、登录注册实现相关推荐

  1. EChat(简易聊天项目)六、实现记住密码和自动登录

    利用SharedPreferences登录界面记住密码和自动登录 ①修改login_layout.xml文件,增加如下代码,即添加2个勾选框 <LinearLayoutandroid:orien ...

  2. EChat(简易聊天项目)三、聊天界面UI实现

    一.添加部分控件完善登入过程 ① 设计应用登录界面加入ImageView 在login_layout.xml中加入以下代码 <?xml version="1.0" encod ...

  3. EChat(简易聊天项目)八、Socket实现即时通信(包括部分修改)

    利用Socket实现即时通信 在MyEclipse中写Server端 工程结构如图 SocketMessage.java 该类是一个消息类,用于表示消息是由谁发给谁的.消息内容是什么.接收时间是多少, ...

  4. EChat(简易聊天项目)二、好友列表实现

    使用 ExpandableListView控件实现好友列表,登录后跳转到FriendActivity 修改friend_layout.xml文件 <?xml version="1.0& ...

  5. EChat(简易聊天项目)四、模拟强制下线

    利用标准广播或本地广播模拟聊天应用中用户异地登录时的强制下线功能 ①修改IndexActivity中代码 public class IndexActivity extends BaseActivity ...

  6. EChat(简易聊天项目)七、保存聊天记录

    (二)使用LitePal数据库保存用户聊天记录 分析: 首先需要进行数据库的创建,需要一张表(自定义类HistoryChat)来保存聊天记录信息, 其次,需要将聊天的记录增加到数据库对应记录中:最后需 ...

  7. EChat(简易聊天项目)五、存储聊天记录中的图片

    利用文件存储实现存储聊天记录中的图片 首先先需要使聊天界面可以发送图片,然后再对其进行存储操作 ①修改Msg类,增加了imgpath,即图片路径 public class Msg {public st ...

  8. 快速上手Springboot项目(登录注册保姆级教程)

    本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...

  9. Vue项目之登录注册

    Vue项目之登录注册 1. 注册 1.1 注册页面的布局 1.2 注册业务逻辑的实现 2. 登录 3.导航守卫 3.1全局导航守卫,全部路由都会经过这里.一定要调用next方法向下执行 3.2 路由独 ...

最新文章

  1. 【Spring框架家族】Spring Cloud Eureka 之常用配置解析(转载)
  2. 剖析java中的String之__拼接
  3. 谷歌 | 多任务学习,如何挑选有效的辅助任务?只需一个公式!
  4. 飞鸽传书内网传输好伙伴
  5. Objective-C控制语句
  6. python 获取表格中的空数据_在python beautifulsoup中获取表格单元格值为空时的文本输出...
  7. docker设置开机自启动
  8. Delphi android 开发视频教程
  9. vld(Visual Leak Detector)下载地址和源码地址
  10. python——【2】gzip模块二进制格式读取压缩文件
  11. (How to)使用IE9的F12开发人员工具分析模拟登陆网站(百度首页)的内部逻辑过程
  12. C语言中的绝对值函数
  13. U3D 场景快速搭建教程
  14. Windows桌面应用程序(1-2-4-2nd) 桌面窗口管理器
  15. OpenCV之轮廓检测(检测银行卡上的黑色磁条)
  16. vue element upload组件 file-list的动态绑定
  17. 中国民族药产业“十四五”发展重点及投资商机研究报告2021-2027年
  18. 数据可视化-----标签云的实现
  19. Avue使用本地/网络数据字典
  20. 人生苦短我用Python 五:ERROR: No matching distribution found for REfo==0.13

热门文章

  1. 年龄计算机在线计算适合你的对象,抖音年龄计算器恋爱对象生日,年龄计算器适合你的恋爱对象...
  2. 蜗牛星际C单下实现黑群的局域网唤醒
  3. 微信小程序如何页面分享,如何图片长按识别二维码等问题汇总
  4. 激光切割过程中遇到毛边怎么办?
  5. 3-AltiumDesignerPCB设计
  6. RISC-V CPU课程设计报告【计算机组成原理课设】
  7. 到底有几个鸿蒙OS? 谈谈我眼里的鸿蒙操作系统
  8. 淘宝订单详情(插旗)API操作 API 返回值说明
  9. 考虑蒙特卡洛考虑风光不确定性的配电网运行风险 评估 由于风电光伏出力的不确定性,造成配电网运行风险,运用蒙特卡洛概率潮流计算分析电压和线路支路越限
  10. FPGA驱动RGB灯带WS2812B