SharedPreferences的简单使用

在实际的软件运行中,往往需要一些配置信息,在Android中想要实现配置信息的保存操作则非SharedPreferences莫属。SharedPreferences提供一些基础的数据存储功能,其信息的存储按照“Key=value”的形式进行保存,但数据只能是一些基本的数据类型。使用XML文件存放数据,存放位置在/data/data//shared_prefs目录下

SharedPreferences有如下常用的方法:

方法返回值描述
edit()SharedPreferences.Editor获取Editor编辑对象
contains(String key)boolean判断key是否存在
getAll()Map取出全部数据
getBoolean(String key,booean defValue)boolean取出boolean数据,并制定默认值
getInt(String key,int defValue)int取出int数据,并制定默认值
getFloat(String key,float defValue)float取出float数据,并制定默认值
getLong(String key,long defValue)long取出long数据,并制定默认值
getString(String key,String defValue)String取出String数据,并制定默认值

.
在此我们只是得到了读取的操作,而要对其中的数据做写入的操作则需要先通过SharedPreferences类所提供的edit()方法获取SharedPreferences.Editor对象,然后通过此对象调用相应的写入方法。以下是其常用的方法:

方法描述
clear()清除所有数据
commit()提交所更新的数据
putBoolean(String key,boolean value)保存boolean数据
putInt(String key,int value)保存bint数据
putFloat(String key,float value)保存float数据
putLong(String key,long value)保存long数据
putString(String key,String value)保存String数据
remove(String key)删除指定key的数据

.
对于SharedPreferences实例的创建可通过getSharedPreferences(String filename,int mode)来取得SharedPreferences实例,其中filename为指定所要保存的文件名称,mode为指定其操作模式,mode有三种:
MODE_PRIVATE:指定该文件只能被一个应用程序调用
MODE_WORLD_READABLE:允许其他应用读取该文件
MODE_WORLD_WRITEABLE:允许其他应用修改该文件
如果文件为可读写时,其他应用要调用则需要获取到此应用的Context,然后会在应用所在包下的shared_prefs目录下找该SharedPreferences文件。

Context context = createPackageContext("packagename",Context.CONTEXT_IGNORE_SECURITY);   
SharedPreferences sharedPreferences = context.getSharedPreferences("filename", Context.MODE_WORLD_READABLE);

其中packagename为设置mode为MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE文件所在的应用的包名,filename为该文件的filenam,mode对应该文件的mode。
当然,既然SharedPreferences是以xml文件的形式存储于/data/data//shared_prefs目录下,则在其mode设为可读写的情况下还可以通过文件读取的方法获取其xml文件

File sharedPreferencesXML = new File("/data/data/<package name>/shared_prefs/<filenam>.xml");

以下是一个简单的添加和获取代码
PreferencesUtil

public class PreferencesUtil {

    private static PreferencesUtil preferencesUtil = null;
    private SharedPreferences preferences = null;
    private SharedPreferences.Editor editor = null;
    private static String NAME = "name";
    private static String AGE = "age";

    public static PreferencesUtil getPreferences(){
        if (preferencesUtil == null){
            preferencesUtil = new PreferencesUtil();
        }
        return preferencesUtil;
    }

    public void init(Context context){
        if (preferences == null){
            preferences = context.getSharedPreferences("preferences",context.MODE_PRIVATE);
       }
        if (editor == null){
            editor = preferences.edit();
        }
    }

    public void setName(String name){
        editor.putString(NAME,name);
        editor.commit();
    }
    public void setAge(int age){
        editor.putInt(AGE,age);
        editor.commit();
    }
    public String getName(){
        return preferences.getString(NAME,"未设置名字");
    }
    public int getAge(){
        return preferences.getInt(AGE,0);
    }
}

界面布局

<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.doublec.administrator.mysharedpreferences.MainActivity">
    <EditText
        android:id="@+id/edt_name"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="名字"/>
    <EditText
        android:id="@+id/edt_age"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:inputType="number"
        android:hint="年龄"/>
    <Button
        android:id="@+id/commit"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="提交"/>
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Hello World!" />
</LinearLayout>

MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private TextView textView;
    private EditText editName,editAge;
    private Button btnCommit;
    private PreferencesUtil preferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        preferences = PreferencesUtil.getPreferences();
        preferences.init(this);
        textView = (TextView) findViewById(R.id.text);
        editName = (EditText) findViewById(R.id.edt_name);
        editAge = (EditText) findViewById(R.id.edt_age);
        btnCommit = (Button) findViewById(R.id.commit);
        btnCommit.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.commit:
                if (!editName.getText().toString().isEmpty() && !editAge.getText().toString().isEmpty()) {
                    preferences.setName(editName.getText().toString());
                    preferences.setAge(Integer.parseInt(editAge.getText().toString()));
                }
                textView.setText("姓名:" + preferences.getName() + "\n年龄:" + preferences.getAge());
                break;
            default:
                break;
        }
    }
}
SharedPreferencesAndroid中用于存储小量数据的轻量级存储方式,通常用于存储一些简单的配置信息、用户偏好设置等。下面是SharedPreferences使用步骤: 1. 获取SharedPreferences对象 可以通过Context类中的getSharedPreferences()方法获取SharedPreferences对象,需要传入两个参数,第一个参数是文件名,第二个参数是操作模式,包括MODE_PRIVATE、MODE_WORLD_READABLE、MODE_WORLD_WRITABLE等。 ```java SharedPreferences sharedPreferences = getSharedPreferences("config", MODE_PRIVATE); ``` 2. 存储数据 可以通过SharedPreferences.Editor对象的putXXX()方法存储数据,其中XXX表示数据类型,例如putInt()、putString()等。需要注意的是,在调用commit()或apply()方法之前,所有的数据都只是存储在内存中,而不会写入文件。 ```java SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("username", "Tom"); editor.putInt("age", 18); editor.apply(); ``` 3. 读取数据 可以通过SharedPreferences对象的getXXX()方法读取数据,其中XXX表示数据类型,例如getInt()、getString()等。如果读取的键不存在,那么会返回默认值。 ```java String username = sharedPreferences.getString("username", ""); int age = sharedPreferences.getInt("age", 0); ``` 4. 删除数据 可以通过SharedPreferences.Editor对象的remove()方法删除某个键值对,也可以通过clear()方法清空所有数据。需要注意的是,在调用commit()或apply()方法之前,所有的删除操作都只是存储在内存中,而不会写入文件。 ```java SharedPreferences.Editor editor = sharedPreferences.edit(); editor.remove("username"); editor.clear(); editor.apply(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值