1, SharedPreferences储存
类似于Java容器中的map,Python中的字典,这种方式是以键值对类型储存的。支持多种不同的数据类型的储存,即存进去什么,读出来什么(对象的类型不会改变)。
方法&属性介绍:
getSharedPreferences()方法:
定义类:Context
特性:静态方法
参数:String类型的文件名,指定操作模式(Context下的常量)
返回值:SharedPreferences对象
MODE_PRIVATE
仍然与之前类似,且传入0是一样的效果
特性:只有当前活动可以读写
MODE_MULTI_PROCESS
特性:一般用于多个进程访问同一数据时使用
getPreference()方法:
定义类:Activity
特性:静态方法,自定义将当前活动文件名作为数据文件名称
参数:操作模式
返回值:SharedPreferences对象
getDefaultSharedPreferences()方法:
定义类:PreferenceManager
特性:静态方法,自动将当前活动的包名作为数据文件名
参数:context对象
返回值:SharedPreferences对象
edit()方法:
定义类:SharedPreferences
特性:非静态
参数:无
返回值: SharedPreferences.editor对象
put???()方法:
定义类:SharedPreferences.Editor
特性: 非静态方法,???代表存储数据类型,存String则???为String
参数:String类型(键),???类型(值),String则传String,boolean则传boolean,依次类推。
返回值:无
commit()方法:
定义类:SharedPreferences.Editor
特性:非静态方法,用于提交数据,执行命令
参数:无
返回值:无
get???()方法:
定义类:SharedPreferences.Editor
特性:非静态方法,用于读取文件中国的数据
参数:文件名(String类型),默认值(表示当传入参数找不到时会以什么样的默认值)
返回值:相应数据类型
Clear()方法:
定义类:SharedPreferences.Editor
特性:非静态方法,用于清除文件中的内容
参数:无
返回值:无
注意:这种方式,也并非所有的对象都可以收装进去。
案例:实现记住密码功能。
QQ等网络用用软件,往往在登录时,可以选择这样的选项,下面让我们来看看一种简单的实现方法。
首先考虑有三个基础界面:
登录界面,注册界面,登陆成功界面。
几种dialog:
未填写密码或者账号,账号或者密码错误。
一个用来装账号密码,以及上一次是否选中了记住密码选项的数据库存储库。
然后就可以开始动手了。
登录界面:
通过UI设计实现上述界面后就可以进行,activity中的跳转,及一系列操作了。
MainActivity:
packagecom.example.testlogin;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importandroid.os.Bundle;
importandroid.preference.PreferenceManager;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.app.ProgressDialog;
importandroid.content.Context;
importandroid.content.DialogInterface;
importandroid.content.Intent;
importandroid.content.SharedPreferences;
importandroid.view.Menu;
importandroid.view.View;
importandroid.view.Window;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.CheckBox;
importandroid.widget.EditText;
importandroid.widget.Toast;
public classMainActivity extends Activity {
private Buttonlog,in;
private CheckBoxstore;
privateSharedPreferences pref;
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
final EditTextzh=(EditText)findViewById(R.id.zh);
final EditTextps=(EditText)findViewById(R.id.ps);
log=(Button)findViewById(R.id.log);
in=(Button)findViewById(R.id.in);
store=(CheckBox)findViewById(R.id.store);
pref=getSharedPreferences("data1",0);
finalSharedPreferences.Editor editor=pref.edit();
boolean isRemembered=pref.getBoolean("isRemembered",false);
//在第一次没有数据时,该返回值自动为false
if(isRemembered){
zh.setText(pref.getString("acount",""));
ps.setText(pref.getString("pass",""));
store.setChecked(true);
// 如果选中了,记住密码,则密码与账号自动补全
}
else{
editor.clear();
}
log.setOnClickListener(newOnClickListener(){
@SuppressWarnings("deprecation")
@Override
public void onClick(View arg0) {
// TODO Auto-generatedmethod stub
if(zh.getText().length()>0&&ps.getText().length()>0){
if(zh.getText().toString().equals("3")&&ps.getText().toString().equals("admin")){
ThirdActivity.actionStart(MainActivity.this);
if(store.isChecked()){
editor.putBoolean("isRemembered",true);
editor.putString("acount",zh.getText().toString());
editor.putString("pass",ps.getText().toString());
editor.commit();
//勿忘commit方法
}
}
else{
AlertDialog.Buildera=new AlertDialog.Builder(MainActivity.this);
ps.setText("");
a.setPositiveButton("OK",new DialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface arg0, int arg1) {
//TODO Auto-generated method stub
}
});
a.setNegativeButton("Cancle", newDialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface arg0, int arg1) {
//TODO Auto-generated method stub
}
});
a.setTitle("Warning");
a.setMessage("账号或密码错误请重新填写");
a.show();//当密码账号不符合时弹出的warning
}
}
else{
AlertDialog.Buildera=new AlertDialog.Builder(MainActivity.this);
a.setPositiveButton("OK",new DialogInterface.OnClickListener() {
@Override
public voidonClick(DialogInterface arg0, int arg1) {
//TODO Auto-generated method stub
}
});
a.setNegativeButton("Cancle", newDialogInterface.OnClickListener() {
@Override
public voidonClick(DialogInterface arg0, int arg1) {
//TODO Auto-generated method stub
}
});
a.setTitle("Warning");
a.setMessage("账号或密码未填写");
a.show();
//当密码或者账号未填写时弹出的warning窗口
}
}
});
in.setOnClickListener(newOnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generatedmethod stub
Intent i=newIntent(MainActivity.this,SecondActivity.class);
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items tothe action bar if it is present.
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
public static boolean equal(String a,String b){
if (a.equals(b)){
return true;
};
return false;
}
}
简介:
对是否填入密码,账号,或是否正确进行操作,
这里设置账号为3
密码为admin
由于设置账号文本框只能输入数字,所以将本应相反的两者颠倒
这里还设置了两个dialog,用于当上述情况发生时弹出warning
数据isRemembered是用于判断上次是否选中的核心数据,当第一次不存在此数据时该方法返回值为false。
SecondActivity&ThirdActivity中内容简单:
packagecom.example.testlogin;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.view.Menu;
importandroid.view.Window;
public classSecondActivity extends Activity {
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items tothe action bar if it is present.
getMenuInflater().inflate(R.menu.second,menu);
return true;
}
}
packagecom.example.testlogin;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.Window;
public classThirdActivity extends Activity {
@Override
protected void onCreate(BundlesavedInstanceState) {
// TODO Auto-generated method stub
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.loged);
super.onCreate(savedInstanceState);
}
public static void actionStart(Activityactivity){
Intent i=newIntent(activity,ThirdActivity.class);
activity.startActivity(i);
}
}
如此实现了记住密码的功能。
相关图片:
优势:使用方法简单,可以实现不同数据类型的储存。方便,快捷。
劣势:不能更好地分类,无法处理较为复杂的数据关系,且数据仍以明文形式储存,最后还得数据库上阵。
最后附上查找文件方法:
同样DDMS视图——>File Explorer视图——>data——>data——>对应包名——>shared——>所起data名