SharedPreferences接口 是一个轻量级的存储类,主要存储一些应用程序的配置参数,例如 用户名,密码,自定义参数的设置.它存储的数据是以 key/value键值对的形式保持在xml文件中.该文件位于data/data/(packageName)/shared_perfs文件夹中.需要注意的是 SharedPreferences中的values值只能存储float,int,long,boolean.string,StringSet类型数据.
它提供如下常用方法来访问SharedPreferences 中的key/value键值对.
- abstract boolean contains(String key): 判断 SharedPreferences 是否包含特定的key的数据.
- abstract Map(String, ?> getAll(): 获取SharedPreferences 中数据里全部的key-values对.
- abstract boolean getXxx(String key, boolean defValue) : 获取SharedPreferences 数据里指定的key 对应的value.如果key不存在,就返回默认值 defValue. 其中 Xxx 值只能存储float,int,long,boolean.string,StringSet类型数据.
SharedPreferences 对象本身只能获取数据,并不支持数据的存储和修改.数据的存储和修改需要通过SharedPreferences.Editor( ) 方法来实现.
1. abstract SharedPreferences.Editor clear() 清除SharedPreferences 所有的数据
2. abstract SharedPreferences.Editor putXxx(String key, boolean value): 向SharedPreferences 存入指定的key对应的数据. 其中 Xxx 值只能存储float,int,long,boolean.string,StringSet类型数据.
3. abstract SharedPreferences.Editor remove(String key) : 删除SharedPreferences 指定的key对应的数据.
4. abstract boolean commit() :当Editor编辑完成后,调用该方法提交修改.
使用SharedPreferences 存储数据时,首先要通过 context.getSharedPreferences (String name,int mode)获取SharedPreferences 的实例对象,实例代码如下:
SharedPreferences sp = getSharedPreferences(String name,int mode);
上面的代码中,name 表示文件名,mode表示文件操作模式.该模式有多个值可供选择,具体如下:
- MODE_PRIVATE : 指定该 SharedPreferences 中的数据只能被本应用程序读写.
- MODE_APPEND: 该文件的内容可以追加.
- MODE_WORLD_READABLE 指定该 SharedPreferences 中的数据可以被本其他应用程序( 读 ).
- MODE_WORLD_WRITEABLE 指定该 SharedPreferences 中的数据可以被本其他应用程序( 读写 ).
package com.test.sharedpreferences;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* SharedPreferences 的学习
*/
public class MainActivity extends AppCompatActivity {
Button btnRead, btnWrite;
SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnRead = (Button) findViewById(R.id.btn_read);
btnWrite = (Button) findViewById(R.id.btn_write);
sp = getSharedPreferences("data", MODE_PRIVATE); //data表示文件名
final SharedPreferences.Editor editor = sp.edit(); //获取编辑器
btnRead.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//读取字符串
String time = sp.getString("time",null);
//读取int类型的数据
int randomNum = sp.getInt("random",0);
String result = time==null?"您暂时还未输入数据":"写入的时间为: "+time+"\n 上次生成的随机数: "+randomNum;
//使用 Toast 显示数据
Toast.makeText(MainActivity.this, result,Toast.LENGTH_LONG).show();
}
});
btnWrite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//格式化 时间 格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"+"hh:mm:ss");
//存入当前时间
editor.putString("time",sdf.format(new Date()));
//存入一个随机数
editor.putInt("random", (int) (Math.random()*100));
//切勿 忘记 提交
editor.commit();
}
});
}
}
布局界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.test.sharedpreferences.MainActivity">
<Button
android:id="@+id/btn_write"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="写入数据"/>
<Button
android:id="@+id/btn_read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取数据"/>
</LinearLayout>