要实现不同的登录账号有不同的笔记,并且在退出应用后再次启动时保持登录状态,除非用户手动退出登录,您可以通过以下步骤来实现:
SharedPreferences
保存登录状态SharedPreferences
是 Android 提供的一种轻量级的数据存储方式,可以用于存储简单的键值对,如登录状态和当前登录的用户名。
在 LoginActivity.java
中,您可以在用户成功登录后将登录状态和用户名保存到 SharedPreferences
中。
package com.example.notesapp;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class LoginActivity extends AppCompatActivity {
private EditText usernameEditText, passwordEditText;
private Button loginButton;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
usernameEditText = findViewById(R.id.username);
passwordEditText = findViewById(R.id.password);
loginButton = findViewById(R.id.login);
// 初始化数据库
NotesDBHelper dbHelper = new NotesDBHelper(this);
db = dbHelper.getWritableDatabase();
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = usernameEditText.getText().toString();
String password = passwordEditText.getText().toString();
if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
Toast.makeText(LoginActivity.this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();
return;
}
if (isValidLogin(username, password)) {
saveLoginState(username);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("username", username);
startActivity(intent);
finish();
} else {
Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();
}
}
});
// 检查是否已有登录状态
checkLoginState();
}
private boolean isValidLogin(String username, String password) {
Cursor cursor = db.query("users", null, "username=? AND password=?", new String[]{username, password}, null, null, null);
boolean isValid = cursor.getCount() > 0;
cursor.close();
return isValid;
}
private void saveLoginState(String username) {
SharedPreferences sharedPreferences = getSharedPreferences("LoginPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("isLoggedIn", true);
editor.putString("username", username);
editor.apply();
}
private void checkLoginState() {
SharedPreferences sharedPreferences = getSharedPreferences("LoginPrefs", Context.MODE_PRIVATE);
boolean isLoggedIn = sharedPreferences.getBoolean("isLoggedIn", false);
if (isLoggedIn) {
String username = sharedPreferences.getString("username", null);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("username", username);
startActivity(intent);
finish();
}
}
}
MainActivity
中获取当前登录的用户名在 MainActivity.java
中,您可以通过 Intent
或 SharedPreferences
获取当前登录的用户名,并根据用户名加载对应的笔记。
package com.example.notesapp;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private String username;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取用户名
username = getIntent().getStringExtra("username");
if (username == null) {
SharedPreferences sharedPreferences = getSharedPreferences("LoginPrefs", Context.MODE_PRIVATE);
username = sharedPreferences.getString("username", null);
}
if (username != null) {
loadNotesForUser(username);
}
}
private void loadNotesForUser(String username) {
// 根据用户名加载笔记的逻辑
// 您可以查询数据库并加载该用户的笔记
}
}
在 SettingsFragment.java
或其他合适的位置实现退出登录功能。退出登录时,您需要清除 SharedPreferences
中的登录状态。
logoutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clearLoginState();
Intent intent = new Intent(getActivity(), LoginActivity.class);
startActivity(intent);
if (getActivity() != null) {
getActivity().finish();
}
}
});
private void clearLoginState() {
SharedPreferences sharedPreferences = getActivity().getSharedPreferences("LoginPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.apply();
}
SplashActivity
中检查登录状态(可选)您还可以添加一个 SplashActivity
,在启动应用时先检查登录状态,然后决定跳转到 LoginActivity
还是 MainActivity
。
package com.example.notesapp;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sharedPreferences = getSharedPreferences("LoginPrefs", Context.MODE_PRIVATE);
boolean isLoggedIn = sharedPreferences.getBoolean("isLoggedIn", false);
if (isLoggedIn) {
String username = sharedPreferences.getString("username", null);
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.putExtra("username", username);
startActivity(intent);
} else {
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
}
finish();
}
}
通过以上步骤,您可以实现不同的登录账号拥有不同的笔记数据,并且在退出应用后再次启动时保持登录状态,除非用户手动退出登录。这种方式不仅能够提升用户体验,还可以保证用户数据的安全性。