码迷,mamicode.com
首页 > 移动开发 > 详细

android开发关于sp共享数据存储(记住账号密码储存数据例子)

时间:2016-05-12 23:10:16      阅读:411      评论:0      收藏:0      [点我收藏+]

标签:

本文内容过sp共享数据存储实现记住账号密码功能

***************************************************************************************************************************

public class MainActivity extends Activity {

private AutoCompleteTextView completeTextView;
private EditText editText;
private SharedPreferences sp;
private CheckBox issaveBox;




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

//此方法在下面有具体的实现
findMyView();

}



//得到数据集合的方法
private List<String> initNameData() {
List<String> list = new ArrayList<String>();

Map<String, ?> map = sp.getAll();
Set<String> set = map.keySet();
//通过foreath遍历
for (String name : set) {
if(!name.equals("name") && !name.equals("pwd") && !name.equals("issave")){
list.add(name);
}
}
return list;
}




private void findMyView() {
completeTextView = (AutoCompleteTextView) findViewById(R.id.text_autocomplete);
editText = (EditText) findViewById(R.id.text_edit);
issaveBox = (CheckBox) findViewById(R.id.checkbox_issave);
//获得共享数据对象,共享数据对象只负责读数据,写数据由editor对象完成
//参数一:保存数据的文件名,不用加后缀,自动会生成usrmsg.xml文件,存在/data/data/包名/shared_prefs目录下
//参数二:私有模式

sp = getSharedPreferences("userInfo", MODE_PRIVATE);

/*此XML文件即为通过SP存入手机内存中的XML文件,数据如下(总共存了两个账号,一个是记住密码的zhangsan,123 另一个是不记住密码的lisi,4567)
* <?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?>
<map>
   <boolean name="issave" value="false" />
   <string name="zhangsan">123</string>
   <string name="pwd">123</string>
   <string name="lisi">4567</string>
   <string name="name">zhangsan</string>
</map>*/


//读取sp中的数据,设置给控件
//如果用户选择过记住, 加载用户名密码给控件

boolean isSave = sp.getBoolean("issave", false);
issaveBox.setChecked(isSave);
if (isSave) {
String uname = sp.getString("name", "");
completeTextView.setText(uname);

String upwd = sp.getString("pwd", "");
editText.setText(upwd);
}

List<String> usernameList = initNameData();//此方法是得到数据集合,封装在上面
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, 
usernameList);
completeTextView.setAdapter(adapter);

completeTextView.setOnItemClickListener(new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//这里不能用position来获取数据,因为position当用户输入不同数据的时候筛选对应数据的position是不相同的
//参数二的view是当前被单击的对象,用此对象来获取数据
//因为前面给autoComplete控件设置布局用的是安卓系统自带的布局文件,里面含有的只有一个textView,故:

TextView textView = (TextView) view;
String name = textView.getText().toString();
//获得用户选择的用户名后,通过用户名获得相应的密码并给其控件设置上值,实现记住账号密码功能
//getString方法,参数一是关键字,参数二是当搜寻不到的时候默认值填上

String pwd = sp.getString(name, "");
editText.setText(pwd);
}
});
}

public void login(View view){
String name = completeTextView.getText().toString();
String pwd = editText.getText().toString();

//当点击确定按钮时,需要写入数据,这是写数据由editor对象完成,
if(TextUtils.isEmpty(name) || TextUtils.isEmpty(pwd)){
//判断输入的数据是否为空,为空则稍作提示
Toast.makeText(this, "账户名或密码不能为空", Toast.LENGTH_SHORT).show();
}else {
//当点击确定按钮时,需要写入数据,这是写数据由editor对象完成
Editor editor = sp.edit();
if(issaveBox.isChecked()){
//当用户选择记住账户密码的时候,把选项(记住密码)及帐号密码分开存入sp文件中方便获取
editor.putBoolean("issave", true);
editor.putString("name", name);
editor.putString("pwd", pwd);
}else {
editor.putBoolean("issave", false);
}
//当用户没有选择记住账户密码时,以用户输入的用户名作为键,密码作为值存入sp文件中,方便完成自动文本框
editor.putString(name, pwd);
//当数据存储完后,必须提交,只有提交了数据才能真正的存入到sp文件当中
editor.commit();
}

}
}

android开发关于sp共享数据存储(记住账号密码储存数据例子)

标签:

原文地址:http://blog.csdn.net/asswc2004/article/details/51345336

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!