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

你可能感兴趣的:(职场,休闲)