简便轻巧的使用SharedPreferences 存储

来源:互联网 发布:乐乎网络电话 编辑:程序博客网 时间:2024/05/21 06:49

     少量数据需要持久化的时候,我们用不到数据库保存数据(数据很少,操作数据库效率低下)。Android 给我们提供了使用键值对存储数据的SharedPreferences,也就是说,当保存数据的时候,需要给相应数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences支持多种不同数据类型的存储,如存储的数据类型是整型,那么读出来的数据也是整型,存储的数据是一个字符串,读出来的数据也是一个字符串。下面写个demo来演示一下:

首先是布局文件,三个按钮分别表示存数据,取数据,清除数据:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.myapplication.MainActivity">    <Button        android:id="@+id/saveData"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="saveDate" />    <Button        android:id="@+id/getSaveData"        android:layout_below="@id/saveData"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="getSaveData" />    <Button        android:id="@+id/clearData"        android:layout_below="@id/getSaveData"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="clear" /></RelativeLayout>


下面就贴出Activity中的代码:

public class MainActivity extends AppCompatActivity {    private Button saveData ,getSaveData ,clearData;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        saveData = $(R.id.saveData);        getSaveData = $(R.id.getSaveData);        clearData = $(R.id.clearData);        saveData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //创建名为“data”的文件,加入键值对,保存数据                SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();                editor.putString("name","I am  a boy ");                //必须commit                editor.commit();            }        });        getSaveData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //取出文件中键值对,并提示出来                SharedPreferences preferences = getSharedPreferences("data",MODE_PRIVATE);                String name = preferences.getString("name","");                Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show();            }        });        clearData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //                SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();                editor.clear();                editor.commit();            }        });    }    public <T extends View> T $(int id) {        return (T) findViewById(id);    }}
这样做,每次保存数据,取数据,都要commit一下,能不能封装一下呢,更方便的为我们所用呢?下面,我封装一个类,来简易操作这个SharedPreferences:

/** * Created by dhl on 2016/7/14. */public class SharedPreferencesHelper {    private static SharedPreferencesHelper sharedPreferencesHelper = null;    //单例模式,把Context传进去    public static SharedPreferencesHelper getInstance(Context context) {        if (sharedPreferencesHelper == null) {            synchronized (SharedPreferencesHelper.class) {                if (sharedPreferencesHelper == null) {                    sharedPreferencesHelper = new SharedPreferencesHelper();                    sharedPreferencesHelper.setContext(context);                    return sharedPreferencesHelper;                }            }        }        return sharedPreferencesHelper;    }    private Context context;    public void setContext(Context context) {        this.context = context;    }    //取Boolean 型数据    public boolean getBoolean(String key, boolean defValue) {        try {            return getSP().getBoolean(key, defValue);        } catch (NullPointerException exception) {            Log.d("hcj", "" + exception);            return defValue;        }    }    //存Boolean 型数据    public void putBoolean(String key, boolean value) {        try {            SharedPreferences.Editor editor = getSP().edit();            editor.putBoolean(key, value);            editor.commit();        } catch (NullPointerException exception) {            Log.d("hcj", "" + exception);        }    }    //取Long 型数据    public long getLong(String key, long defValue) {        try {            return getSP().getLong(key, defValue);        } catch (NullPointerException exception) {            Log.d("hcj", "" + exception);            return defValue;        }    }    //存Long 型数据    public void putLong(String key, long value) {        try {            SharedPreferences.Editor editor = getSP().edit();            editor.putLong(key, value);            editor.commit();        } catch (NullPointerException exception) {            Log.d("hcj", "" + exception);        }    }    //取整型    public int getInt(String key, int defaultValue) {        try {            return getSP().getInt(key, defaultValue);        } catch (Exception e) {            Log.d("hcj", "" + e);            return defaultValue;        }    }    //存整型    public void putInt(String key, int value) {        try {            SharedPreferences.Editor editor = getSP().edit();            editor.putInt(key, value);            editor.commit();        } catch (Exception e) {            Log.d("hcj", "" + e);        }    }    //取String    public String getString(String key, String defValue) {        try {            return getSP().getString(key, defValue);        } catch (NullPointerException e) {            Log.d("hcj", "" + e);            return defValue;        }    }    //存String    public void putString(String key, String value) {        try {            SharedPreferences.Editor editor = getSP().edit();            editor.putString(key, value);            editor.commit();        } catch (NullPointerException e) {            Log.d("hcj", "" + e);        }    }    //清除数据    public void clear() {        try {            SharedPreferences.Editor editor = getSP().edit();            editor.clear();            editor.commit();        } catch (NullPointerException e) {            Log.d("hcj", "" + e);        }    }    //获得SharedPreferences对象    private SharedPreferences getSP() {        return context.getSharedPreferences("sp", Context.MODE_PRIVATE);    }    private SharedPreferences getSP(String name) {        return context.getSharedPreferences(name, Context.MODE_PRIVATE);    }}

MainActivity 代码修改如下:

package com.example.myapplication;import android.content.SharedPreferences;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private Button saveData ,getSaveData ,clearData;    private SharedPreferencesHelper sh ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        saveData = $(R.id.saveData);        getSaveData = $(R.id.getSaveData);        clearData = $(R.id.clearData);        sh = SharedPreferencesHelper.getInstance(MainActivity.this);        saveData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {              /*  //创建名为“data”的文件,加入键值对,保存数据                SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();                editor.putString("name","I am  a boy ");                //必须commit                editor.commit();*/                sh.putString("name","*******");            }        });        getSaveData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //取出文件中键值对,并提示出来                SharedPreferences preferences = getSharedPreferences("data",MODE_PRIVATE);                String name = preferences.getString("name","");                name = sh.getString("name","");                Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show();            }        });        clearData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //                /*SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();                editor.clear();                editor.commit();*/                sh.clear();            }        });    }    public <T extends View> T $(int id) {        return (T) findViewById(id);    }}
OK了,总结完毕。



0 0
原创粉丝点击