Android数据存储之SharedPreference讲解
2016-09-28 14:24
507 查看
SharePreference 详解上
前言:请关注刘老师讲Android视频,里边有详细讲解http://edu.csdn.net/course/detail/2741/43382?auto_start=1
在开发中,我们常用到SharedPreference来进行信息存储,本文章将通过三个案例来讲解SharedPreference的使用过程
特点:一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对据,通常用来存储一些简单的配置信息
用处:记录登录状态,记录其他偏好操作
存储位置:data/data/程序报名/下边
关键方法:
//获取SharePreference对象,指定存储文件名称,及存储模式 SharedPreference sharedPreferences = getSharedPreferences("config", MODE_PRIVATE); MODE_PRIVATE //默认的模式,只允许本程序和享有本程序id的程序进行访问 MODE_WORLD_READABLE //允许其他应用程序读文件 MODE_WORLD_WRITEABLE //允许其他应用程序写文件 MODE_MULTI_PROCESS //用于多任务,多个进程访问的时候,需要指定该标签 // 获取编辑器 Editor edit = sharedPreferences.edit(); //存储数据 edit.putString("key", value); //提交编辑 edit.commit(); //获取文件中存储的数据 sharedPreferences.getString("username", "");
案例
1:记住用户名密码案例
2:记录ListView条目已读标记
案例一
记住用户名密码案例,
这个案例在开发中非常常见,往往需要我们将用户信息进行记录,方便下次进入程序时直接读取信息,当然涉及到密码问题是需要进行加密处理的.
public class MainActivity extends Activity { private EditText et_password; private EditText et_username; private CheckBox cb_remember; private SharedPreferences sharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); // name 存储信息的文件名 // mode 存储模式 // MODE_PRIVATE 私有模式,只允许你当前应用或者拥有当前应用id的应用来操作 // MODE_WORLD_READABLE 其他应用可读模式 // MODE_WORLD_WRITEABLE 其他应用可读可写模式 // MODE_MULTI_PROCESS 多进程模式 sharedPreferences = getSharedPreferences("config", MODE_PRIVATE); // 初始化数据 initData(); } private void initData() { boolean checked = sharedPreferences.getBoolean("checked", false); if (checked) { // checkBox cb_remember.setChecked(true); // 将用户名和密码显示 String username = sharedPreferences.getString("username", ""); String password = sharedPreferences.getString("password", ""); et_username.setText(username); et_password.setText(password); } } /** * 初始化控件 */ private void initView() { et_password = (EditText) findViewById(R.id.et_password); et_username = (EditText) findViewById(R.id.et_username); cb_remember = (CheckBox) findViewById(R.id.cb_remember); } public void login(View v) { // 点击登陆按钮 String passorod = et_password.getText().toString().trim(); String username = et_username.getText().toString().trim(); if (TextUtils.isEmpty(passorod) || TextUtils.isEmpty(username)) { Toast.makeText(this, "请输入完整信息,要么滚蛋...", 0).show(); return; } // 弹出当前输入的内容 Toast.makeText(this, "用户名" + username + "密码" + passorod, 0).show(); boolean checked = cb_remember.isChecked(); // 获取编辑器 Editor edit = sharedPreferences.edit(); // 如果勾上了 if (checked) { // 将当前用户名和密码存起来 // 写内容 edit.putString("username", username); edit.putString("password", passorod); // 提交信息 edit.putBoolean("checked", true); edit.commit(); } else { // 清除信息 edit.clear(); edit.commit(); } } }
案例二:
记录ListView已读条目效果,这个案例常用来记录已读或者已选条目,逻辑思想是:每次点击条目都将当前条目信息存储到SharedPreference中,存储之前要先将之前的数据给读取出来,然后再拼接添加进去,需要掌握listView的常用用法,点击刷新.
public class MainActivity extends Activity { private ListView listView; private ArrayList<News> newsList = new ArrayList<News>(); private NewsAdapter newsAdapter; private SharedPreferences sharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 找控件 listView = (ListView) findViewById(R.id.listView); // 初始化数据 initData(); // 创建sp对象 sharedPreferences = getSharedPreferences("config", MODE_PRIVATE); // 先获取当前已读条目的内容 String readItem = sharedPreferences.getString("readItem", ""); // 进行分割 String[] split = readItem.split(","); // 遍历数组.里边内容都是索引值 for (String position : split) { // 判断为空 if (TextUtils.isEmpty(position)) { // 退出本次循环,继续下次循环 continue; } // 拿到集合,将该position下的值设置为read newsList.get(Integer.parseInt(position)).setRead(true); } // 创建适配器 newsAdapter = new NewsAdapter(this, newsList); // 设置数据适配器 listView.setAdapter(newsAdapter); // 设置条目点击事件监听 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // 1,2,1 // 先获取之前所存储的值 String readItem = sharedPreferences.getString("readItem", ""); // 判断之前是否点击过该条目 String[] split = readItem.split(","); // 默认没有 boolean flag = false; for (String s : split) { if ((position + "").equals(s)) { // 代表之前已经存过这个值 flag = true; } } // 原先没有点过这个条目 if (!flag) { readItem = readItem + "," + position; // 重新将该值存到文件中 Editor edit = sharedPreferences.edit(); edit.putString("readItem", readItem); edit.commit(); // 获取集合中的该条目,设置为已读 newsList.get(position).setRead(true); // 刷新界面 newsAdapter.notifyDataSetChanged(); } } }); } private void initData() { for (int i = 0; i < 30; i++) { newsList.add(new News("新闻" + i, R.drawable.ic_launcher)); } } }
以上是对SharedPreference的详细讲解,请关注刘老师讲Android系列视频
http://edu.csdn.net/course/detail/2741/43382?auto_start=1
相关文章推荐
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
- Android数据存储之SharedPreferences 共享首选项/偏好设置
- Android的数据存储--SharedPreferences .
- Android之SharedPreference轻量级数据存储
- Android存储数据的方法:SharedPreference、File I/O、SQLite与ContentProvider分析
- Android进阶(三) 数据存储之SharedPreference
- android SharedPreferences 简单的数据存储
- Android SharedPreferences 永久存储简单的数据
- android笔记20-数据存储之sharedPreference
- Android学习13——数据存储之SharedPreference
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
- android SharedPreferences 数据存储
- android 利用SharedPreferences 存储系统数据的高级应用(枚举)
- Android之SharedPreference轻量级数据存储
- Android - 采用 SharedPreferences 存储数据
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
- Android数据存储方式之SharedPreference
- Android的移动存储之SharedPreferences <可保存复杂数据>
- Shared preferences - Android 数据存储