sharedPreference属于内部存储,通过调用函数就可实现NVP(名称/值对)的保存和读取。它不仅能保存数据,还能实现不同应用程序间的数据共享。一般用于保存用户的偏好设置,比如设置条目,或保存用户登录信息。 和files/cache一样,数据存储路径是/data/data/包名/shared_prefs,以xml的文件形式保存。
使用步骤:
获取 SharedPreference实例。
SharedPreferences sharedPreferences
= getSharedPreferences("SaveSetting", MODE_PRIVATE
);
preference_name:SharedPreferences 的名称。 这是它在Android文件系统中保存的文件名称。一般声明为字符串常量以便在代码中多次使用。
public static final String PREFERENCENAME
= "SaveSetting";
MODE_PRIVATE指私有模式。 SharedPreference支持三种访问模式:私有(MODE_PRIVATE)、全局读(MODE_WORLD_READABLE)、全局写(MODE_WORLD_WRITEABLE)。私有模式仅可创建的程序有权对其读写;全局读或全局写模式则其他程序也可对其进行读或写操作。
进入编辑模式,通过SharedPreference.Editor类进行修改。
SharedPreferences
.Editor editor
= sharedPreferences
.edit();
保存数据。支持各种基本数据类型,包括整型、布尔型 浮点型等。
editor
.putBoolean("state", isChecked
);
editor
.putString("name", "Tom");
editor
.putInt("age", 20);
editor
.putFloat("height", 1.86f);
调用commit()函数,提交更改。
editor
.commit();
保存数据实例
public class PreferenceDemoActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
private static final String TAG
= "PreferenceDemoActivity";
public static final String PREFERENCENAME
= "SaveSetting";
private Switch mSwitch_is_allow_app_source
;
private SharedPreferences mSharedPreferences
;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState
) {
super.onCreate(savedInstanceState
);
setContentView(R
.layout
.activity_preference_demo
);
mSwitch_is_allow_app_source
= findViewById(R
.id
.switch_is_allow_app_source
);
mSwitch_is_allow_app_source
.setOnCheckedChangeListener(this);
mSharedPreferences
= getSharedPreferences(PREFERENCENAME
, MODE_PRIVATE
);
}
@Override
public void onCheckedChanged(CompoundButton buttonView
, boolean isChecked
) {
Log
.d(TAG
, "onCheckedChanged: isChecked==" + isChecked
);
SharedPreferences
.Editor editor
= mSharedPreferences
.edit();
editor
.putBoolean("state", isChecked
);
editor
.commit();
}
}
保存的数据在/data/data/包名/shared_prefs目录下: SaveSetting.xml文件的内容以键值对的方式保存:
从保存的SharedPreference中读取数据
同样是调用getSharedPreferences()函数,第一个参数指明需要访问的SharedPreference名称。
SharedPreferences sharedPreferences
= getSharedPreferences("SaveSetting", MODE_PRIVATE
);
通过get()函数获取保存在SharedPreference中的键值对。 第一个参数是NVP的名称,第二个参数是默认值,在无法获取数值时使用。
boolean state
= sharedpreferences
.getBoolean("state", false);
String string
= sharedpreferences
.getString("name", "defalt name");
int age
= sharedpreferences
.getInt("age", 20);