数据存储(1)--键值对

SharedPreference

使用getSharedPreference(name,mode)或者这个SharedPreference,下面的例子,第一次显然是没有这个文件的。这个方法可以在
app中的任何Context调用,这个方法是属于某个Context的,就是需要有上下文,sunshine的工具类这个方法:
public static String getPreferredLocation(Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    return prefs.getString(context.getString(R.string.pref_location_key),
            context.getString(R.string.pref_location_default));
}
有点区别,应该是Preference的问题,一会讨论。
获得SharedPreference之后,读很简单,直接调用getString,getInt等方法,如果要写的话,需要获得一个SharedPreference.Edtior,可以通过
SharedPreference.edit()方法获得,接着调用Editor的putInt putString等方法写, 最后要注意,一定要调用Editor.commit方法。这样数据就
提交了下面的完整的例子。
public class MainActivity extends AppCompatActivity {
    SharedPreferences preferences;
    SharedPreferences.Editor editor;
    public static final String PRE_TAG = "sy.com";
    public static final String KEY_TIME = "time";
    public static final String KEY_RANDOM = "random";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        preferences = getSharedPreferences(PRE_TAG, MODE_PRIVATE);
        editor = preferences.edit();
        Button read = (Button)findViewById(R.id.read);
        Button write = (Button)findViewById(R.id.write);
        read.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String time = preferences.getString(KEY_TIME, null);
                int random = preferences.getInt(KEY_RANDOM, 0);
                String result = time == null ? "暂时未写入数据" : "上次写入时间" + time + "\n上次生成随机数" + random;
                Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
            }
        });
        write.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
                editor.putString(KEY_TIME, sdf.format(new Date()));
                editor.putInt(KEY_RANDOM,(int)(Math.random() * 100));
                editor.commit();
            }
        });
    }
}

Setting的Preference

Preference翻译出来就是偏好,设置用户的偏好。
不是用View对象设置用户界面,设置使用Preference的各种在XML文件中声明的子类。
一个Preference对象是一个单独设置的构造组件。每一个Preference展示为一个list的item,为用户提供设置。
我们添加的每一个Preference有一个相对应的键值对保存在一个默认的SharedPreference文件中,用户修改设置,
SharedPreference文件的内容也随之修改。我们不用管写,只需要在用的时候读就可以了。
因为不是用View构造的,所以展示这个设置页面需要一些特殊的子类,3.0之前的,继承PreferenceActivity,3.0之后
可以使用传统的Activity,持有一个PreferenceFragment对象。也可以使用PreferenceActivity创建一个两面的布局为大屏幕。

二者区别联系

每一个偏好的选项,一定要有一个Key,这个key指定了在SharedPreference文件中的key,用他来获取这个偏好选项的值,
安卓系统帮我们维护了这个偏好选项的更新,我们要做的就是读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值