当前位置:   article > 正文

数据存储之shared preferences

shared preferences

 

一. shared preferences

   1、 Shared Preferences 是什么? 

Shared Preferences 类似于winform中做一些小型配置的ini文件,用来保存一些用户设置的参数。例如,可以通过它保存上一次用户所做的修改或者自定义参数设定,当再次启动程序后依然保持原有设置。

 

   2、如何使用 Shared Preferences 获得数据? 

 

Shared Preferences提供了getPreferences方法来获得Preferences对象,取得该对象了,即可以使用Editor取得编辑对象

 

 

3、如何使用 Shared Preferences 保存数据?

   3.1 Shared Preferences支持的数据类型:

     布尔值

     浮点值

     整形值

     长整型

     字符串值

 

 

上文获得Editor对象之后即可通过 Android 提供的各自操作函数进行数据提交,如:putBoolean()提交一个键值 为bool值的数据,最后通过commit方法保存这些数据。

   3.2、使用getPreferences方法创建文件的模式

 

在 Android系统提供的API中, 获取 Preferences对象有四种类型,分别如下:

 

文件创建模式:Activity.MODE_APPEND

如果该文件已经存在,然后将数据写入,而不是抹掉它现有文件的末尾。

文件创建模式:MODE_PRIVATE

默认模式,在那里创建的文件只能由应用程序调用,即为私有的

文件创建模式:Activity.MODE_WORLD_READABLE

允许所有其他应用程序有读取和创建文件的权限。

文件创建模式:Activity.MODE_WORLD_WRITEABLE

允许所有其他应用程序具有写入、访问和创建的文件权限。

本例中使用到了私有的文件创建模式,来获取Preferences对象。

 

 

4、 模拟用户参数设置

 

在模拟的例子中,我们放了一个复选框和一个文本显示控件,然后通过播放音乐来达到模拟效果。当复选框选中时打开音乐,文本显示控件显示当前音乐为:打开,如果反选复选框则音乐停止,文本显示控件显示当前音乐为:关闭。如果你按下模拟器的返回按钮退出的同时保存当前的状态,如果复选框选中则一打开程序立刻播放音乐,反之则不播放音乐。代码如下:

    主Activity

  1. package com.chaowen;
  2. import android.app.Activity;
  3. import android.content.SharedPreferences;
  4. import android.os.Bundle;
  5. import android.view.KeyEvent;
  6. import android.widget.CheckBox;
  7. import android.widget.CompoundButton;
  8. import android.widget.CompoundButton.OnCheckedChangeListener;
  9. import android.widget.TextView;
  10. public class sharePreferencesDemo extends Activity {
  11. /** Called when the activity is first created. */
  12. private TextView myTextView;
  13. private CheckBox myBox;
  14. private playMusic PLAYER=null;
  15. private boolean isplay=false;
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main);
  20. myTextView=(TextView)findViewById(R.id.TextView01);
  21. myBox=(CheckBox)findViewById(R.id.CheckBox01);
  22. PLAYER=new playMusic(this);
  23. /*
  24. * 文件创建模式:Activity.MODE_APPEND
  25. * 如果该文件已经存在,然后将数据写入,而不是抹掉它现有文件的末尾。
  26. */
  27. /*
  28. * 文件创建模式:MODE_PRIVATE
  29. * 默认模式,在那里创建的文件只能由应用程序调用,即为私有的
  30. */
  31. /*
  32. * 文件创建模式:Activity.MODE_WORLD_READABLE
  33. * 允许所有其他应用程序有读取和创建文件的权限。
  34. */
  35. /*
  36. * 文件创建模式:Activity.MODE_WORLD_WRITEABLE
  37. * 允许所有其他应用程序具有写入、访问和创建的文件权限。
  38. */
  39. SharedPreferences setting=getPreferences(Activity.MODE_PRIVATE);
  40. //通过key值找到value,如果不存在即返回false
  41. isplay=setting.getBoolean("isplay", false);
  42. myBox.setChecked(isplay);
  43. if(isplay){
  44. myTextView.setText("当前的音乐播放状态:开");
  45. isplay=true;
  46. PLAYER.Play();
  47. }else {
  48. myTextView.setText("当前的音乐的播放状态:关");
  49. }
  50. myBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
  51. @Override
  52. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  53. if(isChecked){
  54. myTextView.setText("当前的音乐播放状态:开");
  55. isplay=true;
  56. PLAYER.Play();
  57. }else {
  58. myTextView.setText("当前的音乐的播放状态:关");
  59. isplay=false;
  60. PLAYER.FreeMusc();
  61. }
  62. }
  63. });
  64. }
  65. @Override
  66. public boolean onKeyDown(int keyCode, KeyEvent event) {
  67. if(keyCode==KeyEvent.KEYCODE_BACK){
  68. SharedPreferences uiState=getPreferences(0);
  69. SharedPreferences.Editor editor=uiState.edit();
  70. editor.putBoolean("isplay", isplay);
  71. editor.commit();
  72. if(isplay){
  73. PLAYER.FreeMusc();
  74. }
  75. this.finish();
  76. return true;
  77. }
  78. return super.onKeyDown(keyCode, event);
  79. }
  80. }

  playMusic.java

 package com.chaowen;

  1. import java.io.IOException;
  2. import android.content.Context;
  3. import android.media.MediaPlayer;
  4. public class playMusic {
  5. public MediaPlayer music=null;
  6. private Context myContext;
  7. public playMusic(Context cc)
  8. {
  9. myContext=cc;
  10. }
  11. public void Play()
  12. {
  13. music=MediaPlayer.create(myContext, R.raw.start);
  14. music.setLooping(true);
  15. try {
  16. music.prepare();
  17. } catch (IllegalStateException e) {
  18. // TODO: handle exception
  19. e.printStackTrace();
  20. }
  21. catch (IOException e) {
  22. // TODO: handle exception
  23. e.printStackTrace();
  24. }
  25. music.start();
  26. }
  27. public void FreeMusc()
  28. {
  29. if(music!=null)
  30. {
  31. music.stop();
  32. music.release();
  33. }
  34. }
  35. }

 main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <CheckBox android:id="@+id/CheckBox01"
  8. android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>
  9. <TextView android:id="@+id/TextView01"
  10. android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
  11. </LinearLayout>
 

 

5、查看 Preferences 产生的文件

通过上面的例子和代码的实现,己经实现了我们当初期望得到的效果,如果说它像winform中的ini文件,那么它就会创建在一个地方咯。没错,下面我们就来找到它。

在每安装一个Android 应用程序时,data/data目录下都会产生一个文件夹,如果应用程序中使用了 Preferences 则会在该应用程序文件夹下产生一个shared_prefs文件夹,我们产生的文件正安静的躺在那里等着我们呢。。。。(YY中。。。),查看步骤要求:

  • 必须启动模拟器,运行程序。
  • 在 你使用的IDE中切换到DDMS视图,选择File Explorer标签。注意:如果你的File Explorer里面没有任何东西,请根据此步骤找回--》DDMS-在Devices标签中选择
    • 点击Reset adb即可将你的 File Explorer还原。
    • 找到/data/data目录中对应的项目文件夹下的shared_prefs文件夹

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/308767
推荐阅读
相关标签
  

闽ICP备14008679号