数据存储与访问(SharedPreferencesDemo)

简介:

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

1.SharedPreferences(轻量级存储方式)

1.1:通过此种方式,用户可以将NVPName/Value/Pair,名称/值对)保存在ANDROID的文件系统中,而且SharedPreferences完全屏蔽对文件系统的操作过程,开发人员仅是通过调用 SharedPreferencesNVP进行保存和读取。。。。吼吼。

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.访问者需要确切知道每个数据的名称和数据类型,用以正确读取数据。

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

http://blog.51cto.com/mzh3344258/733371

,如需转载请自行联系原作者

相关文章
|
5月前
|
存储 Kubernetes 测试技术
在k8s中,有哪些存储?
在k8s中,有哪些存储?
|
7月前
|
存储 小程序
数据存储,详细讲解
数据存储,详细讲解
|
存储
【数据的存储】
【数据的存储】
90 0
|
存储
数据的存储(下)
数据的存储(下)
|
存储 小程序 编译器
数据的存储(上)
数据的存储(上)
|
存储 缓存 固态存储
一文看懂存储
一文看懂存储
247 1
|
存储 监控 安全
使用阿里云存储
使用阿里云存储
105 1
|
存储 SQL NoSQL
存储的未来
存储的未来
127 1
|
存储 应用服务中间件 nginx
k8s--数据存储、EmptyDir存储
k8s--数据存储、EmptyDir存储
|
存储 编译器 C语言
数据的存储 详解(上)
数据的存储 详解
108 0