本篇使用SharedPreference,實現簡單的註冊登陸界面
同時這也是中國大學慕課移動終端應用開發的網課作業20
原題目要求:
(1)通過“註冊”按鈕,跳轉到“註冊”界面輸入用戶名和密碼。
(2)點擊“登錄”按鈕,匹配已“註冊”的用戶名和“密碼”,用戶名和密碼正確與否,用Toast進行信息提示。
說明
1.有關SharedPreference的學習,建議大家閱讀此篇博客:Android中SharedPreference的用法
2.由於需要存儲複雜類型對象列表,我的解決方案是將List對象轉換爲json對象再進行的存儲。使用的是fastjson。
3.能實現判斷用戶註冊是否重複,允許輸入正確口令的用戶登陸等簡單功能。
4.功能簡單,僅作參考
代碼
包含兩個Activity及對應佈局和一個User對象
1.添加依賴
由於使用的是阿里巴巴的fastjson,所以得先build.gradle文件中添加對fastjson的依賴
implementation 'com.alibaba:fastjson:1.2.10'
2.MainActivity.java
public class MainActivity extends AppCompatActivity {
private EditText mEditTextName,mEditTextPassword;
private Button mButtonRegister,mButtonLogin;
private ArrayList<User> mUsers = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
mButtonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = mEditTextName.getText().toString();
String password = mEditTextPassword.getText().toString();
if (!name.equals("")&&!password.equals("")){
User user = new User(name,password);
mUsers = read();//獲取已經註冊的集合
if (!judge(user)){//如果不存在
Toast.makeText(MainActivity.this,"用戶名或密碼錯誤",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this,"登陸成功,歡迎您",Toast.LENGTH_LONG).show();
}
}else {
Toast.makeText(MainActivity.this,"用戶名或密碼爲空",Toast.LENGTH_SHORT).show();
}
}
});
mButtonRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(RegisterActivity.createIntent(MainActivity.this));
}
});
}
private void init(){
mEditTextName = findViewById(R.id.login_edit_name);
mEditTextPassword = findViewById(R.id.login_edit_password);
mButtonLogin = findViewById(R.id.login_button_login);
mButtonRegister = findViewById(R.id.login_button_register);
}
/**
* 判斷user的用戶名密碼是否匹配
* */
private boolean judge(User user){
boolean flag = false;
for (User u:mUsers){
//用戶名與密碼相互匹配
if (user.name.equals(u.name)&&user.password.equals(u.password)){
flag = true;
}
}
return flag;
}
/**
* 讀取數據
* */
private ArrayList<User> read(){
//只允許本應用讀取
SharedPreferences mSharedPreferences = getSharedPreferences("userLoginInfo",MODE_PRIVATE);
String json = mSharedPreferences.getString("data","");
ArrayList<User> users = new ArrayList<>();
if (!json.equals("")){
users = (ArrayList<User>) JSON.parseArray(json,User.class);
}
return users;
}
}
3.對應的主佈局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal">
<TextView
android:layout_width="60dp"
android:layout_marginLeft="10dp"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="賬號:"/>
<EditText
android:id="@+id/login_edit_name"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="5"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal">
<TextView
android:layout_width="60dp"
android:layout_marginLeft="10dp"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="密碼:" />
<EditText
android:id="@+id/login_edit_password"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="5"
android:inputType="textPassword"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="20dp">
<Button
android:id="@+id/login_button_register"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="註冊"/>
<Button
android:id="@+id/login_button_login"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="登陸"/>
</LinearLayout>
</LinearLayout>
4.RegisterActivity.java
public class RegisterActivity extends AppCompatActivity {
private EditText mEditTextName,mEditTextPassword;
private Button mButtonRegister;
private ArrayList<User> mUsers = new ArrayList<>();
//只允許本應用讀取
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
init();
mButtonRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = mEditTextName.getText().toString();
String password = mEditTextPassword.getText().toString();
if (!name.equals("")&&!password.equals("")){
User user = new User(name,password);
mUsers = read();//獲取已經註冊的集合
if (!judge(user)){//如果不存在
mUsers.add(user);
write(mUsers);
Toast.makeText(RegisterActivity.this,"註冊成功快去登陸吧",Toast.LENGTH_LONG).show();
}else {
Toast.makeText(RegisterActivity.this,"用戶名已經存在",Toast.LENGTH_SHORT).show();
}
}else {
Toast.makeText(RegisterActivity.this,"用戶名或密碼爲空",Toast.LENGTH_SHORT).show();
}
}
});
}
private void init(){
mEditTextName = findViewById(R.id.register_edit_name);
mEditTextPassword = findViewById(R.id.register_edit_password);
mButtonRegister = findViewById(R.id.register_button_register);
}
/**
* 判斷user是否已經在list裏了
* */
private boolean judge(User user){
boolean flag = false;
for (User u:mUsers){
//用戶名重複
if (user.name.equals(u.name)){
flag = true;
}
}
return flag;
}
/**
* 讀取數據
* */
private ArrayList<User> read(){
SharedPreferences mSharedPreferences = getSharedPreferences("userLoginInfo",MODE_PRIVATE);
String json = mSharedPreferences.getString("data","");
ArrayList<User> users = new ArrayList<>();
if (!json.equals("")){
users = (ArrayList<User>) JSON.parseArray(json,User.class);
}
return users;
}
/**
* 寫入數據
* */
private void write(ArrayList<User> users){
SharedPreferences mSharedPreferences = getSharedPreferences("userLoginInfo",MODE_PRIVATE);
SharedPreferences.Editor mEdit = mSharedPreferences.edit();
String json = JSON.toJSONString(users);
mEdit.putString("data",json);
mEdit.commit();
}
//打開自己的方法
public static Intent createIntent(Context context){
return new Intent(context,RegisterActivity.class);
}
}
5.對應佈局文件 activity_register.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal">
<TextView
android:layout_width="60dp"
android:layout_marginLeft="10dp"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="賬號:"/>
<EditText
android:id="@+id/register_edit_name"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="5"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal">
<TextView
android:layout_width="60dp"
android:layout_marginLeft="10dp"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="密碼:" />
<EditText
android:id="@+id/register_edit_password"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="5"
android:inputType="textPassword"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="20dp"
android:orientation="vertical">
<Button
android:id="@+id/register_button_register"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:text="註冊"/>
</LinearLayout>
</LinearLayout>
6.User.java
注意得實現Serializable接口
import java.io.Serializable;
public class User implements Serializable {
public String name;
public String password;
public User(String name, String password) {
this.name = name;
this.password = password;
}
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
總結
如果有什麼問題或改進方案,請私信聯繫我或者在評論區留言
碼字不易,若有幫助,給個關注和讚唄