首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

数据储存之shared preferences

2012-08-26 
数据存储之shared preferences?一. shared preferences? ?1、 Shared Preferences 是什么??Shared Preferen

数据存储之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

package com.chaowen;import android.app.Activity;import android.content.SharedPreferences;import android.os.Bundle;import android.view.KeyEvent;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.TextView;public class sharePreferencesDemo extends Activity {    /** Called when the activity is first created. */private TextView myTextView;private CheckBox myBox;private playMusic PLAYER=null;private boolean isplay=false;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                myTextView=(TextView)findViewById(R.id.TextView01);        myBox=(CheckBox)findViewById(R.id.CheckBox01);        PLAYER=new playMusic(this);        /*         * 文件创建模式:Activity.MODE_APPEND         * 如果该文件已经存在,然后将数据写入,而不是抹掉它现有文件的末尾。         */         /*         * 文件创建模式:MODE_PRIVATE         * 默认模式,在那里创建的文件只能由应用程序调用,即为私有的         */         /*         * 文件创建模式:Activity.MODE_WORLD_READABLE         * 允许所有其他应用程序有读取和创建文件的权限。         */        /*         * 文件创建模式:Activity.MODE_WORLD_WRITEABLE         * 允许所有其他应用程序具有写入、访问和创建的文件权限。         */                SharedPreferences setting=getPreferences(Activity.MODE_PRIVATE);        //通过key值找到value,如果不存在即返回false        isplay=setting.getBoolean("isplay", false);        myBox.setChecked(isplay);        if(isplay){        myTextView.setText("当前的音乐播放状态:开");        isplay=true;        PLAYER.Play();        }else {myTextView.setText("当前的音乐的播放状态:关");}                myBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){ myTextView.setText("当前的音乐播放状态:开"); isplay=true; PLAYER.Play(); }else {myTextView.setText("当前的音乐的播放状态:关");isplay=false;PLAYER.FreeMusc();}}});    }            @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {           if(keyCode==KeyEvent.KEYCODE_BACK){           SharedPreferences uiState=getPreferences(0);           SharedPreferences.Editor editor=uiState.edit();           editor.putBoolean("isplay", isplay);           editor.commit();           if(isplay){               PLAYER.FreeMusc();               }               this.finish();               return true;           }                                return super.onKeyDown(keyCode, event);    }}

??playMusic.java

?package com.chaowen;

import java.io.IOException;import android.content.Context;import android.media.MediaPlayer;public class playMusic {public MediaPlayer music=null;private Context myContext;public playMusic(Context cc){myContext=cc;}public void Play(){ music=MediaPlayer.create(myContext, R.raw.start);music.setLooping(true);try {music.prepare();} catch (IllegalStateException e) {// TODO: handle exceptione.printStackTrace();}catch (IOException e) {// TODO: handle exceptione.printStackTrace();}music.start();  }public void FreeMusc(){if(music!=null){music.stop();music.release();}}}

?main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><CheckBox   android:id="@+id/CheckBox01" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox><TextView   android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView></LinearLayout>
?数据储存之shared preferences

?

5、查看 Preferences?产生的文件

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

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

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

热点排行