现在的位置: 首页 > 综合 > 正文

Android–数据存储之SharedPreferences

2012年05月21日 ⁄ 综合 ⁄ 共 2988字 ⁄ 字号 评论关闭

android中apk中的信息保存主要有四种方式,SharedPreferences、File(Properties)、Network、SQLite

SharedPreferences:保存apk中的一些配置信息或者用户信息,采用键值对方式保存,保存的数据类型只能是一些基本数据类型(int、string、boolean..)

今天的demo就是利用SharedPreferences保存历史用户的基本信息,在登录界面内,将历史用户信息绑定在AutoCompleteTextView中,实现google搜索条的自动提示功能。

第一步:打开登录界面,加载所有历史用户信息,每一个用户信息用UserInfo对象保存

 

代码

public class UserInfo{
private String name="";
private String pwd="";
private boolean isRemember=false;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
。。。。。
}

开始的时候想让Properties保存List<UserInfo>对象,但是Properties好像也只能保存一些基本数据类型,所以没办法退而求其次,将所有的用户信息保存到String中,格式为:name1/pwd1/isRemember1,name2/pwd2/isRemember2,name3/pwd3/isRemember3。保存方式确定下来后就可以加载资源了

 

代码

SharedPreferences settings=this.getPreferences(Activity.MODE_PRIVATE);
String userinfos
= settings.getString(PREF_USERINFO, "");//获得用户字串
if(userinfos!=""){
usernames
=new ArrayList<String>();//AutoCompleteTextView的数据源
List<UserInfo> li=new ArrayList<UserInfo>();//用于保存用户列表信息

if(userinfos.contains(",")){
String[] users
=userinfos.split(",");
for(String str : users){
UserInfo u
= new UserInfo();
String[] user
=str.split("/");
u.name
=user[0];
u.pwd
=user[1];
u.isRemember
=Boolean.parseBoolean(user[2]);
usernames.add(user[
0]);
li.add(u);
}
}
else{
UserInfo u
= new UserInfo();
String[] user
=userinfos.split("/");
u.name
=user[0];
u.pwd
=user[1];
u.isRemember
=Boolean.parseBoolean(user[2]);
usernames.add(user[
0]);
li.add(u);
}
return li;
}
else{
return null;
}

第二步:配置AutoCompleteTextView数据源,也就是上面得到的List<String> usernames;

代码

ArrayAdapter<String> adapter=new ArrayAdapter<String>(this
  , android.R.layout.simple_dropdown_item_1line, usernames);
actname.setAdapter(adapter);
actname.setOnItemClickListener(
this);//列表选定事件,加载用户密码和是否记住

 

代码

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
Log.v(tag, "-----------item selected");
String name
=this.actname.getText().toString().trim();
for(UserInfo user : list){//循环用户信息列表,根据用户名找到对应的详细用户信息
if(user.getName().equals(name)){
String pwd
=user.getPwd();
boolean bl=user.isRemember();
etpwd.setText(pwd);
ckremember.setChecked(bl);
return;
}
}
}

第三步:保存用户信息

先检查是否存在相同用户信息,更新用户列表(list)信息

 

 

 

 

代码

//检查是否包含此用户名
public void checkUser(){
String uname
=actname.getText().toString().trim();
String pwd
=etpwd.getText().toString().trim();
boolean bl=ckremember.isChecked();
int position=0;
for(int i=0;i<list.size();i++){
if(list.get(i).getName().equals(uname)){
position
=i;
break;
}
}
if(position>=0){//已存在
list.remove(position);
}
UserInfo u
=new UserInfo();
u.setName(uname);
u.setPwd(pwd);
u.setRemember(bl);
list.add(u);
}

 

 

 将最终用户信息一条一条保存

代码

//保存用户信息
private void saveUserInfo(){
checkUser();//检查是否已存在相同用户信息
SharedPreferences settings
=this.getPreferences(Activity.MODE_PRIVATE);
String userinfos
= "";
for(UserInfo user : list){//最终保存的用户信息都在list中
String uname
=user.getName();
String pwd
=user.getPwd();
String userinfo
=uname+"/"+pwd;
if(user.isRemember()){
userinfo
+="/true";
}
else{
userinfo
+="/false";
}
if(userinfos==""){
userinfos
=userinfo;
}
else{
userinfos
+=","+userinfo;
}
}
Editor editor
=settings.edit();//编辑器记录
editor.putString(PREF_USERINFO, userinfos);
editor.commit();
//编辑器提交保存
}

 

 

 

 

 

 

 

抱歉!评论已关闭.