Android开发 登录注册设计,Android登录注册设计指南

马肤

温馨提示:这篇文章已超过471天没有更新,请注意相关的内容是否还可用!

摘要:,,在Android开发中,登录注册设计是应用的基础功能之一。设计过程中需考虑用户体验与安全性。包括创建用户界面,确保简洁明了,便于用户输入信息;后台需验证用户输入的信息,确保安全性。还需考虑注册后的用户管理,如个人信息修改、密码找回等功能。整体设计需平衡用户体验与安全性,为用户提供便捷、安全的登录注册体验。

用Android Studio 简单的实现登录注册

目录

一、登录界面

activity_login.xml 布局代码:

login.java 代码: 

二、注册界面 

activity_register.xml布局代码:

register.java 代码:

三、修改密码(忘记密码 ?)

activity_update_password.xml布局代码:

UpdatePassword.java 代码:

四、SQLite 与 SharedPreferences 操作

QQHelper.java 创建SQLite数据库:

QQperate.java 对SQLite数据库进行增、改、查操作:

SaveQQ.java保存QQ账号与密码:

五、登录成功界面

六、 styles.xml 和AndroidManifest.xml

styles.xml 代码:

AndroidManifest.xml 代码:


Android开发 登录注册设计,Android登录注册设计指南 第1张Android开发 登录注册设计,Android登录注册设计指南 第2张Android开发 登录注册设计,Android登录注册设计指南 第3张Android开发 登录注册设计,Android登录注册设计指南 第4张

一、登录界面

activity_login.xml 布局代码:


    
        
        
        
            
            
            
        
        
            
            
            
        
        
            
            
            
        
    

login.java 代码: 

package com.example.datastorage;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
public class login extends AppCompatActivity implements View.OnClickListener {
    QQHelper qqHelper;
    private EditText login_z, login_m;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        qqHelper = new QQHelper(login.this);
//        login.this.deleteDatabase("qq.db");
        init();
        Outdate();
    }
    private void init() {
        login_z = findViewById(R.id.login_z);
        login_m = findViewById(R.id.login_m);
        Button bt_register = findViewById(R.id.bt_register);
        Button bt_xpassword = findViewById(R.id.bt_xpassword);
        Button bt_login = findViewById(R.id.bt_login);
        bt_register.setOnClickListener(this);
        bt_xpassword.setOnClickListener(this);
        bt_login.setOnClickListener(this);
    }
    private void Outdate() {
        Map map = SaveQQ.getUserInfo(login.this);
        String account = map.get("account");
        String password = map.get("password");
        login_z.setText(account);
        login_m.setText(password);
    }
    @SuppressLint("NonConstantResourceId")
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.bt_register: {
                Intent intent = new Intent(login.this , register.class);
                startActivity(intent);
                finish();
                break;
            }
            case R.id.bt_xpassword: {
                Intent intent = new Intent(login.this , UpdatePassword.class);
                startActivity(intent);
                finish();
                break;
            }
            case R.id.bt_login: {
                String account = login_z.getText().toString().trim();
                String password = login_m.getText().toString();
                Log.i("debug","登录按钮");
                if(TextUtils.isEmpty(account) || TextUtils.isEmpty(password)) {
                    Toast.makeText(this, "账号和密码不能为空", Toast.LENGTH_SHORT).show();
                    break;
                }
                int f = QQperate.query(login.this, account, password);
                if(f == 1) {
                    Intent intent = new Intent(login.this , zhujianActivity.class);
                    SaveQQ.SaveUserInfo(login.this, account, password);
                    Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
                    startActivity(intent);
                    finish();
                } else {
                    Toast.makeText(this, "账号或密码错误", Toast.LENGTH_SHORT).show();
                }
                break;
            }
        }
    }
}

二、注册界面 

activity_register.xml布局代码:


    
        
        
        
        
            
            
            
        
        
            
            
            
        
        
            
            
            
        
        
            
            
            
        
        
    

register.java 代码:

package com.example.datastorage;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class register extends AppCompatActivity {
    private EditText register_z, register_m, register_am, register_pnum;
    private ImageView back;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        init();
    }
    private void init() {
        register_z = findViewById(R.id.register_z);
        register_pnum = findViewById(R.id.register_pnum);
        register_m = findViewById(R.id.register_m);
        register_am = findViewById(R.id.register_am);
        Button bt_rgcommit = findViewById(R.id.bt_rgcommit);
        back = findViewById(R.id.register_back);
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                result();
            }
        });
        bt_rgcommit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String account = register_z.getText().toString();
                String num = register_pnum.getText().toString().trim();
                String password = register_m.getText().toString();
                String apassword = register_am.getText().toString();
                if(TextUtils.isEmpty(account)) {
                    Toast.makeText(register.this, "账号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if(TextUtils.isEmpty(num)) {
                    Toast.makeText(register.this, "号码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if(TextUtils.isEmpty(password)) {
                    Toast.makeText(register.this, "密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if(TextUtils.isEmpty(apassword)) {
                    Toast.makeText(register.this, "确认密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if(!password.equals(apassword)) {
                    Toast.makeText(register.this, "密码和确认密码不相同", Toast.LENGTH_SHORT).show();
                    return;
                }
                int f = QQperate.insert(register.this, account, num, password);
                if (f == 1) {
                    SaveQQ.SaveUserInfo(register.this , account, password);
                    Toast.makeText(register.this, "注册成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(register.this, "注册失败,账号或者号码已存在", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    private void result() {
        Intent intent = new Intent(register.this , login.class);
        startActivity(intent);
        finish();
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            result();
        }
        return false;
    }
}

三、修改密码(忘记密码 ?)

activity_update_password.xml布局代码:


    
        
        
        
        
            
            
            
        
        
            
            
            
        
        
            
            
            
        
        
    

UpdatePassword.java 代码:

package com.example.datastorage;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.Map;
public class UpdatePassword extends AppCompatActivity {
    private EditText up_pnum, up_m, up_am;
    private ImageView back;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update_password);
        init();
    }
    private void init() {
        up_pnum = findViewById(R.id.up_pnum);
        up_m = findViewById(R.id.up_m);
        up_am = findViewById(R.id.up_am);
        Button bt_upcommit = findViewById(R.id.bt_upcommit);
        back = findViewById(R.id.password_back);
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                result();
            }
        });
        bt_upcommit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String num = up_pnum.getText().toString().trim();
                String password = up_m.getText().toString();
                String apassword = up_am.getText().toString();
                if (TextUtils.isEmpty(num)) {
                    Toast.makeText(UpdatePassword.this, "号码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (TextUtils.isEmpty(password)) {
                    Toast.makeText(UpdatePassword.this, "新密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (TextUtils.isEmpty(apassword)) {
                    Toast.makeText(UpdatePassword.this, "确认密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (!password.equals(apassword)) {
                    Toast.makeText(UpdatePassword.this, "确认密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                int f = QQperate.update(UpdatePassword.this , num, password);
                if(f == 1) {
                    Map map = QQperate.queryUp(UpdatePassword.this , num);
                    SaveQQ.SaveUserInfo(UpdatePassword.this , map.get("account"), map.get("password"));
                    Toast.makeText(UpdatePassword.this, "修改成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(UpdatePassword.this, "修改失败", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    private void result() {
        Intent intent = new Intent(UpdatePassword.this , login.class);
        startActivity(intent);
        finish();
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            result();
        }
        return false;
    }
}

四、SQLite 与 SharedPreferences 操作

SQlite数据库存储主要用来保存用户信息,SharedPreferences存储主要用来实现记录账号与密码的功能,方便下次登录。

QQHelper.java 创建SQLite数据库:

package com.example.datastorage;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class QQHelper extends SQLiteOpenHelper {
    public QQHelper(@Nullable Context context) {
        super(context, "qq.db", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String sql = "create table user(_id Integer primary key AUTOINCREMENT,  account varchar(20) , num varchar(20), password varchar(20))";
        sqLiteDatabase.execSQL(sql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }
}

QQperate.java 对SQLite数据库进行增、改、查操作:

package com.example.datastorage;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import java.util.HashMap;
import java.util.Map;
public class QQperate {
    //添加用户
    public static int insert(Context context, String account, String num, String password) {
        QQHelper qqHelper = new QQHelper(context);
        SQLiteDatabase db = qqHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("account",account);
        values.put("num",num);
        values.put("password",password);
        String sql = "select * from user where account=? or num=?";
        Cursor cursor = db.rawQuery(sql, new String[]{account, num});
        int f = 0;
        if(cursor.getCount() == 0) {
            db.insert("user",null,values);
            f = 1;
        }
        db.close();
        cursor.close();
        return f;
    }
    //修改密码
    public static int update(Context context, String num, String password) {
        QQHelper qqHelper = new QQHelper(context);
        SQLiteDatabase db = qqHelper.getWritableDatabase();
        String sql = "update user set password=? where num=?";
        Cursor cursor = db.query("user",null,"num=?",new String[]{num},null,null,null);
        int f = 0;
        if(cursor.getCount() != 0) {
            db.execSQL(sql,new String[]{password, num});
            f = 1;
        }
        db.close();
        cursor.close();
        return f;
    }
    //查询用户
    public static int query(Context context, String account, String password) {
        QQHelper qqHelper = new QQHelper(context);
        SQLiteDatabase db = qqHelper.getWritableDatabase();
        String sql = "select * from user where account=? and password=?";
        Cursor cursor = db.rawQuery(sql,new String[]{account,password});
        int f = 0;
        if(cursor.getCount() != 0) f = 1;
        db.close();
        cursor.close();
        return f;
    }
    //通过注册号码查询账号与密码
    public static Map queryUp(Context context, String num) {
        QQHelper qqHelper = new QQHelper(context);
        SQLiteDatabase db = qqHelper.getWritableDatabase();
        String sql = "select * from user where num=?";
        Cursor cursor = db.rawQuery(sql,new String[]{num});
        Map map = new HashMap();
        if(cursor.moveToNext()) {
            @SuppressLint("Range") String account = cursor.getString(cursor.getColumnIndex("account"));
            @SuppressLint("Range") String password = cursor.getString(cursor.getColumnIndex("password"));
            map.put("account",account);
            map.put("password",password);
        }
        cursor.close();
        db.close();
        return map;
    }
}

SaveQQ.java保存QQ账号与密码:

package com.example.datastorage;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.HashMap;
import java.util.Map;
public class SaveQQ {
    public static void SaveUserInfo(Context context, String account, String password) {
        SharedPreferences sharedPreferences = context.getSharedPreferences("QQuser",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("account",account);
        editor.putString("password",password);
        editor.apply();
    }
    public static Map getUserInfo(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences("QQuser",Context.MODE_PRIVATE);
        String account = sharedPreferences.getString("account",null);
        String password = sharedPreferences.getString("password",null);
        Map map = new HashMap();
        map.put("account",account);
        map.put("password",password);
        return map;
    }
}

五、登录成功界面

activity_zhujian.xml 代码:


    
        
        
    

zhujianActivity.java 代码:

package com.example.datastorage;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class zhujianActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zhujian);
    }
}

六、 styles.xml 和AndroidManifest.xml

在创建Activity之后,需要对创建的Activity进行配置,在AndroidManifest.xml中可以看到Activity的配置,其中exported根据需要设置,启动模式可以选择默认,stles.xml里面设置的是竖线。(AndroidManifest.xml 中有不是登录注册的Activity配置,不要混淆)

styles.xml 代码:


    
        2dp
        18dp
        center
        #7D978B
    

AndroidManifest.xml 代码:


    
        
        
        
        
        
        
        
        
            
                
                
            
        
    

0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码