`
jk138
  • 浏览: 151052 次
  • 性别: Icon_minigender_1
  • 来自: 茂名
社区版块
存档分类
最新评论

数据存储之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() {
			
			@Override
			public 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 exception
				e.printStackTrace();
			}
			catch (IOException e) {
				// TODO: handle exception
				e.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>
 

 

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文件夹

分享到:
评论

相关推荐

    android 数据存储之 Shared Preferences

    NULL 博文链接:https://byandby.iteye.com/blog/833292

    Android 使用Shared Preferences进行数据存储-样例.rar

    Android 使用Shared Preferences进行数据存储-样例,演示如何使用 Shared Preferences 获得数据和保存数据、如何使用getPreferences方法创建文件的模式,以及如何使用getPreferences模拟用户参数设置、查看 ...

    shared-preferences for flutter

    Shared Preferences是Android平台上的一个轻量级的数据存储类,用于保存和读取应用程序的一些常用配置和数据,比如用户设置的参数、游戏分数、应用程序状态等。Shared Preferences类似于Windows中的INI文件,它允许...

    Android数据持久化之Preferences机制详解

    Preferences是一种轻量级的数据存储机制,他将一些简单的数据类型的数据,包括boolean类型,int类型,float类型,long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferences目录(/data/data/&...

    android开发揭秘PDF

    6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享(ContentProviders) 6.7 小...

    《Android应用开发揭秘》附带光盘代码.

     6.2 数据存储之Shared Preferences  6.3 数据存储之Files  6.4 数据存储之Network  6.5 Android数据库编程  6.5.1 SQLite简介  6.5.2 SQLite编程详解  6.5.3 SQLiteOpenHelper应用  6.6 数据共享(Content...

    《Android应用开发揭秘》源码

     6.2 数据存储之Shared Preferences  6.3 数据存储之Files  6.4 数据存储之Network  6.5 Android数据库编程  6.5.1 SQLite简介  6.5.2 SQLite编程详解  6.5.3 SQLiteOpenHelper应用  6.6 数据共享(Content...

    Android应用开发揭秘pdf高清版

    6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享(ContentProviders) 6.7 小...

    实验10-Android数据存储和IO.doc

    实验报告评语与评分: 评阅老师签名: 一、实验名称:Android数据存储与IO 二、实验日期:2014/11/13 三、实验目的: 1、掌握SharedPreferences的存储数据的格式及位置,能够读写其他应用程序的Shared Preferences。...

    android数据存储

    在Android中,提供了三种数据存储的途径,和两种存储方式。 三种途径: l 系统配置(Shared Preferences): 这类应用主要是系统的配置信息的保存,比如我给程序界面设置了颜色,我想在下一次启动时还是能够保留...

    一本介绍如何进行安卓(Android)应用程序开发的书籍

    数据存储:介绍如何在安卓应用程序中进行数据存储,包括Shared Preferences、SQLite数据库、文件存储等方式。 网络通信:介绍如何在安卓应用程序中进行网络通信,包括HTTP请求、WebSocket、Retrofit等网络库的使用...

    五种文件存储的方式

    1、Shared Preferences(轻量级数据存储) 2、Internal Storage(内部存储) 3、External Storage(外部存储) 4、SQLite Databases(数据库存储) 5、Network Store(网络存储)

    SharedPreferences例子源码

    SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的...

    【Android】数据存储

    使用共享首选项(Shared Preferences)3. 序列化3.1. XML序列化3.2. XML解析4. SQLite数据库4.1. SQLite的命令行操作4.2. 在SQL数据库中存放数据4.3. 数据库的事务 摘自老师文档 1. 保存数据到文件 1.1. 内部、...

    android 数据存储之SharedPreferences

    使用SharedPreferences的小项目。

    kotlin-shared-preferences

    共享首选项用于访问和修改Context.getSharedPreferences(String,int)返回的首选项数据的接口。 对于任何特定的首选项集,所有客户端都共享一个此类的单个实例。 对首选项的修改必须经过一个Editor对象,以确保首...

    【Android】数据存储_问答

    Content保存数据到文件使用共享首选项 (Shared Preferences)序列化SQLite数据库 保存数据到文件 在android设备中什么是internal和external存储区? internal,内部存储区,不易失,保存的文件是 app 私有的 ...

Global site tag (gtag.js) - Google Analytics