Android Studio心得-创建登录注册项目

慈云数据 2024-04-10 技术支持 60 0

        首先先了解AndroidStudio是什么:Android Studio是一个由谷歌开发的Android应用程序开发环境,用于开发Android应用程序。它基于JetBrains IntelliJIDEA软件,并包含了许多定制化功能,包括易于使用的分析工具、内存分析工具和代码编辑器等,支持Java、Kotlin等多种编程语言。Android Studio还提供了模拟器和虚拟设备来测试应用程序,可以帮助开发者更加高效地进行Android应用程序开发。

Android Studio心得-创建登录注册项目
(图片来源网络,侵删)

       作为一款Android应用程序开发环境,AndroidStudio具有以下优点:

  1. 界面友好:Android Studio提供了简单直观的界面,并且其操作流畅,易于使用和学习。
  2. 功能强大:Android Studio集成了许多强大的功能,如代码自动完成、代码检查和重构等,方便开发者快速创建高质量的Android应用程序。
  3. 支持多种编程语言:Android Studio支持多种编程语言,包括Java、Kotlin等,开发者可以根据自己的需求选择使用不同的编程语言进行开发。
  4. 良好的集成环境:Android Studio能够与其他工具集成,例如Git等版本控制系统,方便开发者在项目开发过程中协作。
  5. 丰富的插件: Android Studio提供了许多插件来扩展其功能,比如可以安装插件来调试代码、设计图形用户界面等。

 接下来我带大家用Android Studio创建一个登陆注册项目:

Android Studio心得-创建登录注册项目
(图片来源网络,侵删)

1.创建—个新的Android项目,名称为"LoginRegisterDemo"。不需要代码。

2.在布局文件中设计好登录和注册页面的UI界面,可以使用EditText来输入用户名和密码。

首先在login_activity.xml中添加登录页面的U元素:

    
    
    

然后在register_activity.xml中添加注册页面的UI元素:

 

    
    
    

3.在Java代码中创建—个数据库类,用于保存用户信息,并添加相应的表,如用户表。

首先,在app目录下的build.gradle文件中添加Room库的依赖:

 

dependencies {
    def room_version = "2.3.0"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
}

然后定义一个User实体类,用于描述用户信息:

 

@Entity(tableName = "users")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    public String username;
    public String password;
}

接着定义一个UserDao类,用于与数据库进行交互:

 

@Dao
public interface UserDao {
    @Query("SELECT * FROM users WHERE username = :username AND password = :password")
    User findUser(String username, String password);
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(User user);
}

最后定义一个AppDatabase类,作为数据库的实体类:

 

@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
    private static AppDatabase sInstance;
    public static synchronized AppDatabase getInstance(Context context) {
        if (sInstance == null) {
            sInstance = Room.databaseBuilder(context.getApplicationContext(),
                    AppDatabase.class, "loginregisterdemo.db")
                    .build();
        }
        return sInstance;
    }
    public abstract UserDao userDao();
}

4.创建—个登录Activity和一个注册Activity,并在其中分别添加对应的UI元素与逻辑实现。

首先创建—个LoginActivity类,在其中添加UI元素以及登录逻辑:

 

public class LoginActivity extends AppCompatActivity {
    private EditText mEditTextUsername;
    private EditText mEditTextPassword;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        mEditTextUsername = findViewById(R.id.editText_userName);
        mEditTextPassword = findViewById(R.id.editText_password);
        Button buttonLogin = findViewById(R.id.button_login);
        buttonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = mEditTextUsername.getText().toString();
                String password = mEditTextPassword.getText().toString();
                User user = AppDatabase.getInstance(LoginActivity.this).userDao().findUser(username, password);
                if (user == null) {
                    Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

然后创建一个RegisterActivity类,在其中添加UI元素以及注册逻辑:

 

public class RegisterActivity extends AppCompatActivity {
    private EditText mEditTextUsername;
    private EditText mEditTextPassword;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        mEditTextUsername = findViewById(R.id.editText_userName);
        mEditTextPassword = findViewById(R.id.editText_password);
        Button buttonRegister = findViewById(R.id.button_register);
        buttonRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = mEditTextUsername.getText().toString();
                String password = mEditTextPassword.getText().toString();
                User user = new User();
                user.username = username;
                user.password = password;
                AppDatabase.getInstance(RegisterActivity.this).userDao().insert(user);
                Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                finish();
            }
        });
    }
}

5.在登录Activity的代码中,通过输入框获取用户输入的用户名和密码,并根据这些信息从数据库中查询用户信息来进行登录验证。

之前在LoginActivity类中已经实现了登录逻辑。如果用户输入的用户名和密码与数据库中的用户信息匹配,则登录成功;否则提示用户名或密码错误。

6.在注册Activity的代码中,通过输入框获取用户的注册信息,并将其保存到数据库中。

之前在RegisterActivity类中已经实现了注册逻辑。当用户填写完注册信息后点击注册按钮时,该信息会被保存到数据库中。

7.在登录Activity和注册Activity中添加相应的按钮监听事件,并在点击按钮时触发对应的事件逻辑。

        之前已经在LoginActivity和RegisterActivity类中分别添加了按钮监听事件,当用户点击登录或注册按钮时,对应的逻辑代码会被执行。以上就是实现Android Studio中登录注册功能的完整步骤和代码。需要注意的是,在实际开发过程中,还需要考虑一些细节问题,比如加密存储密码、输入框输入格式检查等。

接下来是存储用户密码跟加密储存密码的写法又想要的可创建。选写

存储用户密码

 1.在用户输入密码时,通过如下代码获取密码的哈希值:

public static String hashPassword(String password) {
    try {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hash = digest.digest(password.getBytes(StandardCharsets.UTF_8));
        return Base64.encodeToString(hash, Base64.DEFAULT);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return null;
    }
}

⒉.将此哈希值与用户名一起存储到数据库中。

3.在登录时,通过如下代码检查用户名和密码是否匹配:

 

public static boolean checkPassword(String providedPassword, String storedPasswordHash) {
    String hash = hashPassword(providedPassword);
    return hash != null && hash.equals(storedPasswordHash);
}

       建议每次登录时都重新生成一个哈希值进行比对,以增加安全性。使用哈希值存储密码可以避免明文存储密码,即使数据库泄露也不会直接导致用户密码被泄露。
加密储存密码

下面是使用SHA-256算法对密码进行哈希加密和存储到数据库中的完整代码:

1.定义一个加密工具类:

public class EncryptionUtils {
    public static String hashPassword(String password) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(password.getBytes(StandardCharsets.UTF_8));
            return Base64.encodeToString(hash, Base64.DEFAULT);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
    public static boolean checkPassword(String providedPassword, String storedPasswordHash) {
        String hash = hashPassword(providedPassword);
        return hash != null && hash.equals(storedPasswordHash);
    }
}

 2.在注册时,通过如下代码获取用户输入的密码并加密,将加密后的密码保存到数据库中:

String username = mEditTextUsername.getText().toString();
String password = mEditTextPassword.getText().toString();
String encryptedPassword = EncryptionUtils.hashPassword(password); // 哈希加密密码
User user = new User();
user.username = username;
user.encryptedPassword = encryptedPassword; // 保存加密后的密码
AppDatabase.getInstance(RegisterActivity.this).userDao().insert(user);

 3.在登录时,通过如下代码从数据库中读取用户信息,并检查密码是否匹配:

String username = mEditTextUsername.getText().toString();
String password = mEditTextPassword.getText().toString();
User user = AppDatabase.getInstance(LoginActivity.this)
        .userDao()
        .findByUsername(username);
if (user == null) {
    Toast.makeText(LoginActivity.this, "用户名不存在", Toast.LENGTH_SHORT).show();
} else if (EncryptionUtils.checkPassword(password, user.encryptedPassword)) { // 检查密码是否匹配
    Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(LoginActivity.this, "密码错误", Toast.LENGTH_SHORT).show();
}

       在上述代码中,通过调用EncryptionUtils类的hashPassword()方法对密码进行哈希加密,并将加密后的密码保存到数据库中。而在登录时,则通过调用该类的checkPassword()方法检查用户输入的密码与数据库中保存的加密后的密码是否匹配。

     在实际应用开发中处理用户登录注册时需要注意的事项和建议:

  1. 密码加密:对用户密码进行哈希加密,并且不要使用明文存储用户密码。
  2. 防止重复注册:在用户注册时要保证用户名/手机号/邮箱等唯—性。
  3. 用户信息验证:在用户登录时要对用户输入的信息进行验证,例如,检查用户名是否存在、密码是否正确等。
  4. 记住登录状态:在用户登录成功后,可以通过保存Token等方式来记录用户登录状态,在用户再次打开应用或页面时直接跳转至已登录的状态。
  5. 安全退出:在用户退出登录时,要及时清除缓存和Cookie等信息,并提示用户已退出登录。
  6. 隐私保护:在处理用户数据时要遵守相关法律法规,保护用户隐私不被泄露。

以上是登录注册处理中常见的一些注意事项,此外也要结合具体业务场景进行适当的调整和优化。

额外:

要在 Android Studio 中实现点击按钮跳转到另一个 Activity,你需要按照以下步骤进行操作:

  1. 首先,在你的项目中创建一个新的 Activity(比如 SecondActivity),用于跳转后显示的页面。可以通过右键点击项目文件夹 -> New -> Activity -> Empty Activity 来创建。

  2. 在你的源 Activity(即当前页面)的 XML 布局文件中,添加一个按钮控件,并为其设置一个唯一的 android:id。例如:

 

 

   4. 打开源 Activity 的 Java 文件(即当前页面对应的 Activity 类),在 onCreate 方法中找到按钮,并为其设置点击事件监听器。在监听器中,使用 Intent 实例来指定要跳转到的目标 Activity。例如:

Button nextButton = findViewById(R.id.nextButton);
nextButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(CurrentActivity.this, SecondActivity.class);
        startActivity(intent);
    }
});

确保将 CurrentActivity 替换为当前页面的类名,SecondActivity 替换为你创建的目标 Activity 的类名。

   5. 最后,在 AndroidManifest.xml 文件中,将第 3 步中创建的目标 Activity 添加为一个  标签。确保 android:name 属性的值与你创建的目标 Activity 类的名称一致。例如:

 

 

现在,当用户点击源 Activity 的按钮时,就会启动目标 Activity,并跳转到该页面。 

学习使用Android Studio编写登录和注册功能需要掌握以下几个方面:

  1. 基础知识:熟悉Android开发基础知识,如布局、控件、事件处理等。

  2. UI设计:关注良好的UI设计和用户体验,设计简洁明了的界面并考虑不同设备屏幕的适配。

  3. 表单验证和数据处理:对用户输入进行合法性验证,并采取相应的处理措施。

  4. 数据存储:学习如何使用数据库或本地存储技术来保存和检索用户信息。

  5. 安全性考虑:保护用户隐私和账号安全,采取相应的加密和安全处理措施。

  6. 逻辑处理和错误处理:处理登录和注册过程中的逻辑流程,并提示用户合适的错误信息。

  7. 前后端交互:与后端服务器进行数据交互,包括发送请求、解析响应和处理网络连接问题

总的来说,学习使用Android Studio编写登录和注册功能需要深入理解Android开发知识,同时关注UI设计、数据处理、安全性和网络交互等方面。通过不断实践和积累经验,可以逐渐掌握这一技能 。

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon