包含技术点:Activity、Intent、UI资源、Layout布局、View视图控件、广BroadcastReceiver,数据存储SQLite、SharedPreferences
1.启动页面:
2.登录页面:
3.欢迎页面:
4.信息页面:
5.注册页面:
注册功能:使用了SQLite进行数据的存储,先创建了student.db的数据库和student表
public class DataBase extends SQLiteOpenHelper {
//建表SQL语句
private static final String STUDENT = "create table student("
+"id integer primary key autoincrement,"
+"name text, "
+"password text,"
+"age integer,"
+"birth text,"
+"gender integer,"
+"email text,"
+"tel text)";
private Context mContext;
public DataBase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(STUDENT);//执行建表语句
}
最后获得输入框的值,把数据添加到SQLite中
private void registUser() {
//获得student的信息
String name =regist_name.getText().toString();
String password = regist_password.getText().toString();
String age = regist_age.getText().toString();
String birth = regist_birth.getText().toString();
String email = regist_email.getText().toString();
String tel = regist_tel.getText().toString();
if(man.isChecked()){
gender = "1";
// System.out.println("男");
}else if (woman.isChecked()){
gender = "0";
// System.out.println("女");
}
//往数据库插入数据
db.execSQL("insert into student(name,password,age,birth,gender,email,tel) values(?,?,?,?,?,?,?)",new String[]{name,password,age,birth,gender,email,tel});
//提示注册成功
Toast.makeText(this,"注册成功",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(RegistActivity.this,MainActivity.class);
startActivity(intent);
}
SQLite数据库
登录功能:
1.记住密码)登录功能除了完成登录还有一个记住密码功能,当点击记住密码后,退出登录后,依然记得密码。
退出后依然保留密码
记住密码功能使用了SharedPreferences存储技术实现,SharedPreferences采用键值对(key-value)的方式存储数据,当判断到勾选记住密码框后,就将用户名和密码保存在SharedPreferences中,退出登录后,再通过key把value取出来,显示再输入框上
boolean isRemember = preferences.getBoolean("remember_me",false);//设置是否记住密码,初始值为false
//如果是记住密码,从preferences中通过key取出用户名和密码
if(isRemember){
String is_name = preferences.getString("name","");
String is_password = preferences.getString("password","");
name.setText(is_name);
password.setText(is_password);
remember_me.setChecked(true);
}
//登录时如果点击了记住密码,就把用户名和密码保存在preferences中
if(remember_me.isChecked()){
editor.putBoolean("remember_me",true);
editor.putString("name",user);
editor.putString("password",pwd);
}else {
editor.clear();
}
editor.apply();
2.登录)
//通过用户输入的用户名和密码,去数据库查询是否存在
Cursor cursor = db.rawQuery("select * from student where name = ? and password = ?", new String[]{user, pwd});
//如果不存在,则提示用户用户名或密码错误
if(cursor.getCount() == 0){
Toast.makeText(this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
name.setText("");
password.setText("");
}
//如果存在,则将数据库的数据取出,包装给student实体类,然后转到欢迎页面
if(cursor.moveToFirst()){
do{
String username = cursor.getString(cursor.getColumnIndex("name"));
String userpwd = cursor.getString(cursor.getColumnIndex("password"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
String birth = cursor.getString(cursor.getColumnIndex("birth"));
int gender = cursor.getInt(cursor.getColumnIndex("gender"));
String email = cursor.getString(cursor.getColumnIndex("email"));
String tel = cursor.getString(cursor.getColumnIndex("tel"));
student.setName(username);
student.setPassword(userpwd);
student.setAge(age);
student.setBirth(birth);
student.setGender(gender);
student.setEmail(email);
student.setTel(tel);
Intent intent1 = new Intent(MainActivity.this,WelcomeActivity.class);
intent1.putExtra("student",student);
startActivity(intent1);
}while (cursor.moveToNext());
}
退出功能是通过广播(Broadcast)进行退出,当点击退出时,回发送自定义的退出广播,广播接收器(BroadcastReceiver)接收到广播后,就会注销所有Activity,然后再启动登录页面
//点击退出后,"com.example.simplelogin.LOGOUT"为自定义的广播,然后发送广播
if(v.getId() == R.id.welcome_logout){
Intent intent = new Intent();
intent.setAction("com.example.simplelogin.LOGOUT");
intent.setComponent(new ComponentName(getPackageName(),"com.example.simplelogin.LogOutBroadcast"));
sendBroadcast(intent);
}
广播接收器
public class LogOutBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
//收到退出的广播后,注销所有Activity然后重新启动登录页面
ActivityCollector.finishAll();
Intent intent1 = new Intent(context,MainActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
context.startActivity(intent1);
}
}
本次Demo由一个启动页面开始,经过0.5的延迟后,通过Intent跳转到登录页面(MainActivity)
Thread thread = new Thread(){
@Override
public void run() {
try {
//经过0.5秒后跳转到登录页面即MainActivity
sleep(500);
Intent intent = new Intent(StartActivity.this,MainActivity.class);
startActivity(intent);
finish();
}catch (Exception e){
e.printStackTrace();
}
}
};
在登录页面(MainActivity),点击了注册就会通过Intent跳转到注册页面(RegistActivity)
if(v.getId()==R.id.regist){
//跳转到RegistActivity
intent = new Intent(MainActivity.this,RegistActivity.class);
startActivity(intent);
}
点击了登录按钮就会通过Intent跳转到欢迎页面(WelcomeActivity)
Intent intent1 = new Intent(MainActivity.this,WelcomeActivity.class);
intent1.putExtra("student",student);
startActivity(intent1);
来到了欢迎页面,如果选择了查看个人信息Intent跳转到信息页面(InfoActivity),在这里为了方便在信息页面展示数据,在intent中添加了登录用户的信息数据
if(v.getId() == R.id.welcome_info){
Intent intent = new Intent(WelcomeActivity.this,InfoActivity.class);
intent.putExtra("info",student);
startActivity(intent);
}
//信息页面,从Intent取出数据
intent = getIntent();
Student student = (Student) intent.getSerializableExtra("info");
如果选择了退出,就涉及到了Intent与BroadcastReceiver的通信,点击退出时,intent会设置一个Action,为自定义的广播**“com.example.simplelogin.LOGOUT”,然后就把这个包含自定义广播的intent通过sendBroadcast**发送出去,由广播接收器去接收
if(v.getId() == R.id.info_logout){
Intent intent = new Intent();
intent.setAction("com.example.simplelogin.LOGOUT");
intent.setComponent(new ComponentName(getPackageName(),"com.example.simplelogin.LogOutBroadcast"));
sendBroadcast(intent);
}
总结就是如下:
完整代码在我的GitHub