数据存储的方式有以下几种:(有其它方法的再来此处加)
1.SharedPreferences(轻量级存储方式)
1.1:通过此种方式,用户可以将NVP(Name/Value/Pair,名称/值对)保存在ANDROID的文件系统中,而且SharedPreferences完全屏蔽对文件系统的操作过程,开发人员仅是通过调用 SharedPreferences对NVP进行保存和读取。。。。吼吼。
2.经典的文件存储->>一般使用INI文件或XML文件存储
3.轻量级SQlite数据库存储
4.用户自定义文件格式存储
SharedPreferences详解:
此种方式不仅能保存数据,还能够实现不同应用程序间的数据共享。SharedPreferences支持三种访问模式:
私有(MODE_PRIVATE)
仅有创建程序有权限对其进行读取或写入;
全局读(MODE_WORLD_READABLE)
不仅创建程序可以对其进行读取或写入,其他应用程序也读取操作的权限,但没有写入操作的权限;
全局写(MODE_WORLD_WRITEABLE)
创建程序和其他程序都可以对其进行写入操作,但没有读取的权限。
但有时也可以把权限写成既可以全局读,也可以全局写,可以写成以下:
public static int MODE=Context.MODE_WORLD_REEADABLE+Context.MODE_WORLD_WRITEABLE;
除了定义SharedPreferences的访问模式,还要定义SharedPreferences的名称,这个名称与在Android文件系统中保存的文件同名。因此,只要具有相同的SharedPreferences名称的NVP内容,都会保存在同一个文件中,定义如下;
public static final String PREFERRNCE_NAME="SaveSetting";
为了可以使用SharedPreferences,需要次访问模式和SharedPreferences名称作为参数,传递到getSharedPreferences()函数中,并获取到SharedPreferences对象,定义如下:
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME,MODE);
在获取到SharedPreferences 对象后,可以调用SharedPreferences.Editor类对SharedPreferences进行修改,最后调用commit()函数提交即可完成保存修改内容,其中,SharedPreferences支持很多数据类型如:基本数据类型、包括整型、布尔型、浮点型、长型等。定义如下:
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name",XiaoMaGuo);
editor.putString("Age",22);
editor.putFloat("Height",1.85f);
editor.commit();
从已保存的SharedPreferneces中读取数据时的原理同上,同样是调用getSharedPreferences()函数,并在函数的第一个参数中指明需要访问的SharedPreferences名称,定义如下:
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME,MODE);
String name = sharedPreferences.getString("Name","Default_Name");
int age = sharedPreferences.getInt("Age",Default_Age);
float height = sharedPreferences("Height","Default_Height");
其中第二个参数 :“见名知意咯。。”
为什么照着我的方法是正常的??
@Override
protected void onStart() {
super.onStart();
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE);
String name = sharedPreferences.getString("Name", "外星人没名字");
int age = sharedPreferences.getInt("Age", 20);
Toast.makeText(ShowPreferences.this, "XM=="+name+"....NL==="+age, Toast.LENGTH_LONG).show();
}
为什么我在程序中这样取不到?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show);
Context context = null;
try {
context = ShowPreferences.this.createPackageContext(PREFERENCES_PACKAGE, Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE);
XM = (TextView)findViewById(R.id.XM);
System.out.println(XM+"****"+NL+"*****"+SG);
NL = (TextView)findViewById(R.id.NL);
SG = (TextView)findViewById(R.id.SG);
String name = sharedPreferences.getString("Name", "外星人没名字");
int age = sharedPreferences.getInt("Age", 20);
// float height = sharedPreferences.getFloat("Height", 180.0f);
//将取到的值显示在TextView中
XM.setText(name);
NL.setText(age);
OL = (Button)findViewById(R.id.OL);
OL.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
小插曲:
小孟同志发了一短信,好多字不认识,中文…………V_V……O_O…………哇哇。
小结:
由此可见,访问其他应用程序的SharedPreferences必须满足三个条件:
1.共享者需要将SharedPreferences的访问模式设置为全局读或全局;
2.访问者需要知道共享者的包名称和SharedPreferences的名称,以通过Context获得SharedPreferences对象;
3.访问者需要确切知道每个数据的名称和数据类型,用以正确读取数据。