Android数据存储(一)---SharedPreferences

原创 2017年08月20日 16:11:53
Android数据的存储方式:
Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、Content Provider和File;此外还有一种网络存储。由于Android系统中,数据基本都是私有的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider。


SharedPreferences:
在所有应用程序中,都必然涉及数据的交互。有些时候,应用程序有少量的数据需要保存,并且这些数据的格式很简单。SharedPreferences类供开发人员保存和获取基本数据类型的键值对.该类主要用于基本类型, 例如boolean、float、int、long和string。适用范围,比如:软件设置、用户账户设置,用户习惯设置等,这个时候就可以用到SharedPreferences。


其实,SharedPreferences使用xml格式为Android应用提供一种永久的数据存贮方式,并且是使用键值对的方式来存储数据的。对于一个Android应用,它存贮在文件系统的/data/data/包名/shared_prefs/目录下,可以被处在同一个应用中的所有Activity 访问(全局的)。Android 提提供了相关的API来处理这些数据而不需要程序员直接操作这些文件或者考虑数据同步的问题。

存储位置如图:


存储形式:



因为SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences的实例,只能通过Context提供的getSharedPreferences(String name,int mode)方法来获取SharedPreferences的实例:

public abstract SharedPreferences getSharedPreferences(String name,int mode)


此方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称(格式为xml文件),如果指定的文件不存在则会创建一个。SharedPreferences文件都是存放在/data/data/包名/shared_prefs/目录下的;第二个参数用于指定操作模式:

MODE_PRIVATE:默认操作模式,和直接传0效果相同,表示只有当前应用程序才可以对这个SharedPreferences文件进行读写
MODE_WORLD_READABLE:指定此SharedPreferences对其他程序只读且无法修改。
MODE_WORLD_WRITEABLE:指定此SharedPreferences能被其他程序读写。
MODE_MULTI_PROCESS:Android2.3之后已经弃之不用了。


得到SharedPreferences对象后,就可以向SharedPreferences文件中存储数据了,主要分为以下三步:
1.调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象
2.向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean方法,添加一个字符串就用putString()方法,以此类推

3.调用commit()方法将添加的数据提交,从而完成数据存储操作

这里只是简单的演示存取boolean、int和String,其他的都是相似的:

activity_mian.xml布局文件,简单布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.itman.sharedpreferencesdemo.MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="保存" />

        <Button
            android:id="@+id/save_boolean"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="boolean" />

        <Button
            android:id="@+id/save_int"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="int" />

        <Button
            android:id="@+id/save_string"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="string" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取" />

        <Button
            android:id="@+id/get_boolean"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="boolean" />

        <Button
            android:id="@+id/get_int"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="int" />

        <Button
            android:id="@+id/get_string"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="string" />
    </LinearLayout>

</LinearLayout>

MainActivity.java程序:

public class MainActivity extends ActionBarActivity implements OnClickListener {
	private SharedPreferences sharedPreferences;
	private SharedPreferences.Editor editor;

	private Button save_boolean;
	private Button save_int;
	private Button save_string;

	private Button get_boolean;
	private Button get_int;
	private Button get_string;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		InitView();
		
		//实例化一个sharedPreferences对象
		sharedPreferences = getSharedPreferences("data", Context.MODE_PRIVATE);
	}

	private void InitView() {
		save_boolean = (Button) findViewById(R.id.save_boolean);
		save_int = (Button) findViewById(R.id.save_int);
		save_string = (Button) findViewById(R.id.save_string);
		get_boolean = (Button) findViewById(R.id.get_boolean);
		get_int = (Button) findViewById(R.id.get_int);
		get_string = (Button) findViewById(R.id.get_string);

		save_boolean.setOnClickListener(this);
		save_int.setOnClickListener(this);
		save_string.setOnClickListener(this);
		get_boolean.setOnClickListener(this);
		get_int.setOnClickListener(this);
		get_string.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.save_boolean:
			//需要改变sharedPreferences的值就必须获取编辑器
			editor = sharedPreferences.edit();
			editor.putBoolean("boolean_value", true);
			editor.commit();
			
			break;
		case R.id.save_int:
			//需要改变sharedPreferences的值就必须获取编辑器
			editor = sharedPreferences.edit();
			editor.putInt("int_value", 10);
			editor.commit();
			
			break;
		case R.id.save_string:
			//需要改变sharedPreferences的值就必须获取编辑器
			editor = sharedPreferences.edit();
			editor.putString("string_value", "Layne_Yao");
			editor.commit();
			
			break;
		case R.id.get_boolean:
			//如果只是获取sharedPreferences里面的值,就不用editor
			boolean bool = sharedPreferences.getBoolean("boolean_value", false);
			Toast.makeText(this, "您刚刚存储的boolean值:"+bool, Toast.LENGTH_SHORT).show();
			break;
		case R.id.get_int:
			//如果只是获取sharedPreferences里面的值,就不用editor
			int value = sharedPreferences.getInt("int_value", 0);
			Toast.makeText(this, "您刚刚存储的int值:"+value, Toast.LENGTH_SHORT).show();
			break;
		case R.id.get_string:
			//如果只是获取sharedPreferences里面的值,就不用editor
			String str = sharedPreferences.getString("string_value", "null");
			Toast.makeText(this, "您刚刚存储的string值:"+str, Toast.LENGTH_SHORT).show();
			break;

		}

	}

}

运行结果:(没有保存之前获取,如左图,获取默认值)

             

版权声明:欢迎以任何形式转载,但请注明作者和出处

Android学习笔记十二.Android数据存储与IO.SharedPreferences

SharedPreferences     对于应用程序的数据输入、输出,如果是应用程序只是少量数据需要保存,那么使用普通文件就可以了(SharedPrefereces);但如果应用程序有大量数据需要...
  • u012637501
  • u012637501
  • 2015年01月07日 21:35
  • 1119

Android数据存储 SharedPreferences实例

原理概念什么的我就不介绍了,网上很多,我就写一个具体的用法。 SharedPreferences 存储数据 存数据: //实例化一个SharedPreferences  第一个参数是存储key-val...
  • qq_38306233
  • qq_38306233
  • 2017年12月25日 17:25
  • 28

Android 数据存储 (一)SharedPreferences

这篇主要讲一下平常用到的数据存储SharedPreferences,结合demo说下其用法。 1 简介 SharedPreferences是Android提供的一种存储数据的机制,用于存储少量数据,...
  • VNanyesheshou
  • VNanyesheshou
  • 2017年06月27日 15:24
  • 642

Android数据存储(一):SharedPreferences

SharedPreferences提供存储一些简单的配置信息机制,可以存储一些用户登录名及密 码,以键值对的方式存储,下面介绍存储用户和密码,退出程序或返回时再次打开应用程 序 ,仍能显示原来用户...
  • luran_fighting
  • luran_fighting
  • 2012年11月25日 15:31
  • 787

Android中的5种数据存储方式之——SharedPreferences

Android中的5种数据存储方式之——SharedPreferences简介 SharedPreferences是Android平台上一个轻量级数据存储方式,用来保存应用的一些常用配置,比如Acti...
  • zhan1350441670
  • zhan1350441670
  • 2015年07月27日 19:06
  • 1857

android框架搭建——封装一个属于自己的数据存储工具类(sharedPreferences篇)

之前的几篇博文中提到过封装网络工具类,那么在发送请求并获取一个JSONObject对象之后,如何便捷的进行json解析和数据存储便成了我们要考虑的问题,在此分享一下自己在使用了诸多工具之后的一点心得。...
  • cai554112503
  • cai554112503
  • 2015年11月30日 22:24
  • 1058

在Android中使用SharedPreferences存储数据以实现数据共享

在Android中,我们可以使用SharedPreferences来保存数据,以实现数据的共享。 (以一个用户登录为例) 简介: 首先我们需要了解一下SharedPreferences类,Share...
  • Wetsion
  • Wetsion
  • 2016年06月11日 16:56
  • 783

Android的SharedPreferences保存,读取和删除数据

SharedPreferences类是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data//...
  • tian_di_yi_jian
  • tian_di_yi_jian
  • 2016年03月09日 15:35
  • 6478

android SharedPreferences数据的短时间存储

SharePreferences是用来存储一些简单配置信息的一种机制,使用Map数据结构来存储数据,以键值对的方式存储,采用了XML格式将数据存储到设备中。常用来存储一些轻量级的数据。 使用Shar...
  • c1163208826
  • c1163208826
  • 2015年10月05日 15:23
  • 1394

Android上常用的几种本地数据存储方式:1、使用SharedPreferences存储数据

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使...
  • freezingxu
  • freezingxu
  • 2017年04月18日 16:25
  • 621
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android数据存储(一)---SharedPreferences
举报原因:
原因补充:

(最多只允许输入30个字)