`

Android的数据存储之SharedPreferences1

 
阅读更多

概述:
 

    有些应用需要保存配置信息,如是否打开音效开关,登录时是否保存用户名密码等,Android对这类应用提供了SharedPreferences(共享首选项),SharedPreference适合数量少、数据以key-value类型的保存。

 

使用步骤:

1、使用Context.getSharedPreferences(String fileName,int mode)方法获取SharedPreferences对象。   

param1:指定SharedPreferences保存、读取的文件名。该文件存放在data/data/packageName/shared_prefs文件夹下。在file-explorer中能找到该文件,默认名:类名.xml。

param2:MODE,权限

   MODE_WORLD_PRIVATE:私有属性,只有本项目才能读取上面Param1指定的XML

   MODE_WORLD_READABLE:运行其他项目读取本项目中的XML。只读

   MODE_WORLD_WRITEABLE:只写

 

2、获取SharedPreferences.Editor对象

     SharedPreferences.Editor editor = mySharedPreferences.edit();

 

3、通过使用SharedPreferences.Editor接口的putXxx()保存值

 

4、通过使用SharedPreferences.Editor.commit方法提交要保存的key-value对。

      注意:commit方法相当于事务中的commit操作,只要在事件结束后进行提交,才会将key-value真正保存在对应的文件中。

	SharedPreferences my = getSharedPreferences("config", MODE_PRIVATE);
			SharedPreferences.Editor editor = my.edit();
			editor.putString("name", "aaa");
			editor.putBoolean("flag", "true");
			editor.commit();

 

 经典问题:

1、使用IO读取SharedPreference

 

try {
	String path = android.os.Environment.getDataDirectory()
						.getAbsolutePath()
						+ "/data/"
						+ getPackageName()
						+ "/shared_prefs/abc.xml";
        Log.i("TAG", android.os.Environment.getDataDirectory()
						.getAbsolutePath());
// data/data/com.example.test_preferences/shared_prefs/abc.xml
	FileInputStream fis = new FileInputStream(path);
	InputStreamReader isr = new InputStreamReader(fis);
	BufferedReader br = new BufferedReader(isr);
	Toast.makeText(this, br.readLine(), 3000).show();
	fis.close();
} catch (Exception e) {
	e.printStackTrace();
}
 

 

2、将SharedPreferences数据保存在SD卡上。

  分析SharedPreferences的源码,发现xml默认保存在shared_prefs目录中,但是可以通过JAVA反射来修改。

public void saveSD() {
		try {
			Field field = ContextWrapper.class.getDeclaredField("mBase");
			field.setAccessible(true);
			// 获取mBase变量的值
			Object obj = field.get(this);
			field = obj.getClass().getDeclaredField("mPreferencesDir");
			field.setAccessible(true);
			File file = new File("/sdcard0");
			field.set(obj, file);
			SharedPreferences my = getSharedPreferences("config", MODE_PRIVATE);
			SharedPreferences.Editor editor = my.edit();
			editor.putString("name", "aaa");
			editor.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

3、SharedPreferences保存图像

   分析:原则上SharedPreferences只能将字符串以key-value的形式保存。可以采用编码的方式将任何二进制数据转换成字符串形式,保存在SharedPreferences中。

    最常用的是Base64。因为在保存和存取时需要编码解码,所有不建议保存尺寸太大的图像数据或二进制文件。

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.image);
		try {
			btn = (Button) findViewById(R.id.btn_img);
			img = (ImageView) findViewById(R.id.image);
			img2 = (ImageView) findViewById(R.id.image2);
			pref = getSharedPreferences("baseImg", Activity.MODE_PRIVATE);
			String de = pref.getString("imagessss", null);
			if (de != null) {
				byte[] bytes = Base64.decodeBase64(de.getBytes());
				ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
				img2.setImageDrawable(Drawable.createFromStream(bais, "image"));
			}
			btn.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					try {
//						Drawable ddd = getResources().getDrawable(R.drawable.ic_launcher);
//						((BitmapDrawable) ddd).getBitmap();
						ByteArrayOutputStream baos = new ByteArrayOutputStream();
						//把图片压缩到baos字节流中
						((BitmapDrawable) img.getDrawable()).getBitmap()
								.compress(CompressFormat.JPEG, 50, baos);
						//编码过程
						String image = new String(Base64.encodeBase64(baos
								.toByteArray()));
						SharedPreferences.Editor editor = pref.edit();
						editor.putString("imagessss", image);
						editor.commit();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

说明:本文参照李宁老师的《Android高薪之路》

分享到:
评论

相关推荐

    Android数据存储之SharedPreferences

    SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储简单的小型数据,如偏好设置、用户选项等。在本项目中,开发者已经根据官方文档编写了关于SharedPreferences的代码示例,你可以通过下载来...

    android 数据存储之SharedPreferences

    在本项目"android 数据存储之SharedPreferences"中,我们将深入探讨如何使用SharedPreferences来实现数据的持久化。 SharedPreferences的工作原理是基于XML文件,这些文件存放在设备的内部存储区,通常位于`data/...

    Android 3种数据保存(SharedPreferences存储 内部文件存储 数据库存储)

    本教程将详细介绍Android中的三种主要数据存储方式:SharedPreferences存储、内部文件存储以及数据库存储。 1. SharedPreferences存储 SharedPreferences是Android提供的一种轻量级的数据存储方式,用于保存应用...

    Android数据存储——SharedPreferences(登入记住密码)

    SharedPreferences是Android提供的一种简单的数据存储机制,它可以保存基本类型的数据,如布尔值、整型、浮点型、字符串以及字符串集合。这些数据会被保存在XML文件中,并在系统中全局可访问。SharedPreferences支持...

    Android数据存储--SharedPreferences存储

    SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储少量简单的键值对数据,如配置设置、用户偏好等。在本篇博文中,我们将深入探讨如何使用SharedPreferences进行数据存储,并通过源码分析其...

    Android中DataStore替代SharedPreferences

    Android开发者们长期以来一直依赖SharedPreferences作为轻量级的数据存储解决方案,它的简单易用性使其在小规模数据存储方面受到了广泛欢迎。然而,随着应用程序复杂性的增加,SharedPreferences的局限性逐渐暴露...

    Android应用源码之SharedPreferences.zip

    在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储机制,用于存储应用程序的简单配置数据,如用户设置、应用的状态信息等。这个压缩包“Android应用源码之SharedPreferences.zip”很可能...

    android 数据存储——SharedPreferences,有代码实现,简单易懂

    SharedPreferences是Android提供的一种轻量级的数据存储机制,用于存储一些小规模、非结构化的数据,如布尔值、整数、浮点数、字符串等。这些数据以XML文件的形式存储在设备的内部存储空间中,通常位于 `/data/data/...

    Android数据持久化之二:SharedPreferences 存储

    Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是: 1、文件存储 2、SharedPreference 存储 3、数据库存储。SharedPreferences 是使用键值对的方式来存储数据的,使用 SharedPreferences来进行数据...

    Android-Android系统SharedPreferences进行的封装

    在Android开发中,SharedPreferences是系统提供的一种轻量级的数据存储方式,主要用于保存应用程序中的简单配置数据,如布尔值、整型、浮点型、字符串等。由于它的操作简便且易于理解,因此在需要持久化小量数据时...

    Android开发之数据存储的四种方式之SharedPreferences

    Android项目开发中使用的数据存储方式有:网络存储、sqlite存储、File存储和SharedPreferences存储,四种存储方式对应的Demo别人是NetworkDemo、SqliteDemo、FileDemo和SharedPreferencesDemo,根据应用的场景选择...

    Android本地存储SharedPreferences详解

    Android本地存储SharedPreferences详解 存储位置 SharedPreferences数据保存在: /data /data/<package> /shared_prefs 文件夹下,以XML格式保存,根元素为:。文件名称为获取SharedPreferences实例时传递的參数值。...

    Android-Fit利用SharedPreferences存储对象

    在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储一些简单的配置信息,如用户偏好设置、应用状态等。它基于XML文件,提供了键值对的存储方式,非常适合用来保存一些...

    Android 四种存储 SharedPreferences 内存 SD卡 SQLite数据库

    在Android开发中,数据存储是应用功能不可或缺的一部分。Android提供了多种方式来保存应用程序的数据,包括SharedPreferences、内存存储、SD卡存储以及SQLite数据库。这四种存储方式各有特点,适用于不同的场景需求...

    数据存储之SharedPreferences存储

    前面呢,我们讲了文件的存储,文件的存储方式不适合保存一些比较复杂的文本数据。因此,我们来学习一下...SharedPreferences支持不同类型的数据存储,如果你存储的是整型,那你读取出来的也是整型,你存储的是浮点型,

    SharedPreferences文件在不同应用之间数据共享

    SharedPreferences是Android系统提供的一种轻量级的数据存储方式,主要用于存储应用程序的简单配置信息,如布尔值、整型、浮点型、字符串等基本类型及其数组。通常,SharedPreferences数据是私有的,即每个应用只能...

    Android之SharedPreferences数据保存

    SharedPreferences是Android系统提供的一种轻量级的数据存储方式,用于存储简单的键值对数据,如布尔值、整型、浮点型、字符串等。本资源将通过一个具体的例子来介绍如何使用SharedPreferences进行数据保存。 ...

    Android SharedPreferences设置初始密码

    在Android开发中,SharedPreferences是一个轻量级的数据存储方式,常用于保存应用的配置信息或用户设置,如登录状态、主题颜色、用户偏好等。在这个场景中,我们将详细探讨如何使用SharedPreferences来设置和修改...

    android SharedPreferences小例子

    在Android开发中,SharedPreferences是一个轻量级的数据存储机制,用于保存和读取少量的基本数据类型,如字符串、整型、布尔值等。它非常适合用来存储应用程序的配置信息或用户偏好设置,因为这些数据通常不需要复杂...

    android 使用SharedPreferences对数据存储/删除/读取/文件删除

    在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储应用程序的配置信息或者简单数据。它提供了一种键值对的方式,使得数据的存储、删除和读取变得非常方便。下面我们将...

Global site tag (gtag.js) - Google Analytics