天天看点

数据存储与访问(SharedPreferencesDemo)

数据存储的方式有以下几种:(有其它方法的再来此处加)

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);

//                float height = sharedPreferences.getFloat("Height", 180.0f);

        //将取到的值显示在TextView中

        XM.setText(name);

        NL.setText(age);

        OL = (Button)findViewById(R.id.OL);

        OL.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

finish();

});

    }

                 小插曲:

小孟同志发了一短信,好多字不认识,中文…………V_V……O_O…………哇哇。

小结:

由此可见,访问其他应用程序的SharedPreferences必须满足三个条件:

1.共享者需要将SharedPreferences的访问模式设置为全局读或全局;

2.访问者需要知道共享者的包名称和SharedPreferences的名称,以通过Context获得SharedPreferences对象;

3.访问者需要确切知道每个数据的名称和数据类型,用以正确读取数据。

<b>     本文转自华华世界 51CTO博客,原文链接:</b>

<b>http://blog.51cto.com/mzh3344258/733371</b>

<b>,如需转载请自行联系原作者</b>