Android--数据存储之SharedPreferences

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对象,但是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 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();
// 编辑器提交保存
}

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/jico/archive/2010/10/22/1858501.html

你可能感兴趣的:(移动开发,数据库)