您的位置:首页 > 移动开发 > Android开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息