Android 中SharedPreferences的详解
Posted 路宇_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中SharedPreferences的详解相关的知识,希望对你有一定的参考价值。
一、SharedPreferences 首选项 介绍
- 存储软件的配置信息
- 存储的信息:很小,简单的数据;比如:自动登录,记住密码,小说app(返回后再次进入还是 原来看的页数),按钮的状态。
特点:当程序运行首选项里面的数据会全部加载进内容。
二、SharedPreferences的简单使用
1.布局文件中,写入两个按钮,保存到SP,和从SP中获取数据
布局代码的文件就不再写了。
2.看MainActivity的代码,里面有注释详解
package com.example.spdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btn_save;
private Button btn_obtain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_save=findViewById(R.id.btn_save);
btn_obtain=findViewById(R.id.btn_obtain);
//保存到SP
btn_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sp = getSharedPreferences("onClick", MODE_PRIVATE);
sp.edit().putString("SoundCode","测点代码").apply();//apply才会写入到xml配置文件里面
}
});
//获取到SP中的数据
btn_obtain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sp1 = getSharedPreferences("onClick", MODE_PRIVATE);
//如果SoundCode,获取的值是空的,则会弹出后面的默认值
String obtain = sp1.getString("SoundCode", "默认值");
Toast.makeText(MainActivity.this, obtain, Toast.LENGTH_SHORT).show();
}
});
}
/**
*
*参数1:SP的名字
*参数2:SP保存时,用的模式,MODE_PRIVATE常规(每次保存都会更新),MODE_APPEND(每次保存都会追加到后面)
* @Override
* public SharedPreferences getSharedPreferences(String name, int mode) {
* return mBase.getSharedPreferences(name, mode);
* }
*
*/
}
三、SharedPreferences的实战,实现记录密码和自动登录功能
效果如下:
1.XML代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="用户名:"
android:textSize="25sp"
android:gravity="right"
/>
<EditText
android:id="@+id/et_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="密码:"
android:textSize="25sp"
android:gravity="right"
/>
<EditText
android:id="@+id/et_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:inputType="textPassword"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/ck_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="记住密码"
android:textSize="20sp"
/>
<CheckBox
android:id="@+id/ck_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="自动登录"
android:textSize="20sp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/btn_register"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="注册"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
/>
<Button
android:id="@+id/btn_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="登录"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
/>
</LinearLayout>
</LinearLayout>
2.MainActivity代码如下:详解和注释都已经写好
package com.example.shareddemo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText et_name;
private EditText et_password;
private CheckBox ck_password;
private CheckBox ck_login;
private Button btn_register;
private Button btn_login;
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_name=findViewById(R.id.et_name);
et_password=findViewById(R.id.et_password);
ck_password=findViewById(R.id.ck_password);
ck_login=findViewById(R.id.ck_login);
btn_register=findViewById(R.id.btn_register);
btn_login=findViewById(R.id.btn_login);
sp = getSharedPreferences("Personal", MODE_PRIVATE);
//登录方法
LoginMethod();
//程序再次进入获取SharedPreferences中的数据
AgainInto();
}
private void AgainInto() {
//如果获取为空就返回默认值
boolean ck1 = sp.getBoolean("ck_password", false);
boolean ck2 = sp.getBoolean("ck_login", false);
//如果是记住密码
if (ck1){
String name=sp.getString("name","");
String password=sp.getString("password","");
et_name.setText(name);
et_password.setText(password);
//记住密码打上√
ck_password.setChecked(true);
}
//如果是自动登录
if (ck2){
ck_login.setChecked(true);
Toast.makeText(this, "我是自动登录!", Toast.LENGTH_SHORT).show();
}
}
private void LoginMethod() {
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name=et_name.getText().toString().trim();
String password=et_password.getText().toString().trim();
//判断用户名和密码是否为空
if (TextUtils.isEmpty(name)||TextUtils.isEmpty(password)){
Toast.makeText(MainActivity.this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();
}else {
//如果记录密码是勾选的
if (ck_password.isChecked()){
//把用户名和密码保存在SharedPreferences中
sp.edit().putString("name",name).apply();
sp.edit().putString("password",password).apply();
sp.edit().putBoolean("ck_password",true).apply();
}else {//没有勾选,保存空值
sp.edit().putString("name","").apply();
sp.edit().putString("password","").apply();
sp.edit().putBoolean("ck_password",false).apply();
}
//如果自动登录是勾选的
if (ck_login.isChecked()){
sp.edit().putBoolean("ck_login",true).apply();
}else {
sp.edit().putBoolean("ck_login",false).apply();
}
}
}
});
}
}
以上就是SharedPreferences类的基本使用,记录,学习,和总结~ 一直在路上
以上是关于Android 中SharedPreferences的详解的主要内容,如果未能解决你的问题,请参考以下文章
Android中如何设置SharedPreference文件名称?
如何在android中使用SharedPreference存储动态表值[重复]
Android 如何从 SharedPreference 设置 EditTextPreference 的默认值?