Android-简单的登录,注册以及查看个人信息案例

Android大作业说明文档

包含技术点:Activity、Intent、UI资源、Layout布局、View视图控件、广BroadcastReceiver,数据存储SQLite、SharedPreferences


页面展示(共有五个页面)

1.启动页面:

在这里插入图片描述

2.登录页面:

在这里插入图片描述

3.欢迎页面:

在这里插入图片描述

4.信息页面:

在这里插入图片描述

5.注册页面:

在这里插入图片描述

扫描二维码关注公众号,回复: 8549052 查看本文章

主要功能介绍

注册功能:使用了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数据库

1558080322522

登录功能:

1.记住密码)登录功能除了完成登录还有一个记住密码功能,当点击记住密码后,退出登录后,依然记得密码。

1558080334207

退出后依然保留密码

1558080351410

记住密码功能使用了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);
    }
}

Intent在Activity和BroadcastReceiver的通信

本次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");

如果选择了退出,就涉及到了IntentBroadcastReceiver的通信,点击退出时,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

发布了65 篇原创文章 · 获赞 74 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40866897/article/details/90315014