概述:
有些应用需要保存配置信息,如是否打开音效开关,登录时是否保存用户名密码等,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高薪之路》
相关推荐
SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储简单的小型数据,如偏好设置、用户选项等。在本项目中,开发者已经根据官方文档编写了关于SharedPreferences的代码示例,你可以通过下载来...
在本项目"android 数据存储之SharedPreferences"中,我们将深入探讨如何使用SharedPreferences来实现数据的持久化。 SharedPreferences的工作原理是基于XML文件,这些文件存放在设备的内部存储区,通常位于`data/...
本教程将详细介绍Android中的三种主要数据存储方式:SharedPreferences存储、内部文件存储以及数据库存储。 1. SharedPreferences存储 SharedPreferences是Android提供的一种轻量级的数据存储方式,用于保存应用...
SharedPreferences是Android提供的一种简单的数据存储机制,它可以保存基本类型的数据,如布尔值、整型、浮点型、字符串以及字符串集合。这些数据会被保存在XML文件中,并在系统中全局可访问。SharedPreferences支持...
SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储少量简单的键值对数据,如配置设置、用户偏好等。在本篇博文中,我们将深入探讨如何使用SharedPreferences进行数据存储,并通过源码分析其...
Android开发者们长期以来一直依赖SharedPreferences作为轻量级的数据存储解决方案,它的简单易用性使其在小规模数据存储方面受到了广泛欢迎。然而,随着应用程序复杂性的增加,SharedPreferences的局限性逐渐暴露...
在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储机制,用于存储应用程序的简单配置数据,如用户设置、应用的状态信息等。这个压缩包“Android应用源码之SharedPreferences.zip”很可能...
SharedPreferences是Android提供的一种轻量级的数据存储机制,用于存储一些小规模、非结构化的数据,如布尔值、整数、浮点数、字符串等。这些数据以XML文件的形式存储在设备的内部存储空间中,通常位于 `/data/data/...
Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是: 1、文件存储 2、SharedPreference 存储 3、数据库存储。SharedPreferences 是使用键值对的方式来存储数据的,使用 SharedPreferences来进行数据...
在Android开发中,SharedPreferences是系统提供的一种轻量级的数据存储方式,主要用于保存应用程序中的简单配置数据,如布尔值、整型、浮点型、字符串等。由于它的操作简便且易于理解,因此在需要持久化小量数据时...
Android项目开发中使用的数据存储方式有:网络存储、sqlite存储、File存储和SharedPreferences存储,四种存储方式对应的Demo别人是NetworkDemo、SqliteDemo、FileDemo和SharedPreferencesDemo,根据应用的场景选择...
Android本地存储SharedPreferences详解 存储位置 SharedPreferences数据保存在: /data /data/<package> /shared_prefs 文件夹下,以XML格式保存,根元素为:。文件名称为获取SharedPreferences实例时传递的參数值。...
在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储一些简单的配置信息,如用户偏好设置、应用状态等。它基于XML文件,提供了键值对的存储方式,非常适合用来保存一些...
在Android开发中,数据存储是应用功能不可或缺的一部分。Android提供了多种方式来保存应用程序的数据,包括SharedPreferences、内存存储、SD卡存储以及SQLite数据库。这四种存储方式各有特点,适用于不同的场景需求...
前面呢,我们讲了文件的存储,文件的存储方式不适合保存一些比较复杂的文本数据。因此,我们来学习一下...SharedPreferences支持不同类型的数据存储,如果你存储的是整型,那你读取出来的也是整型,你存储的是浮点型,
SharedPreferences是Android系统提供的一种轻量级的数据存储方式,主要用于存储应用程序的简单配置信息,如布尔值、整型、浮点型、字符串等基本类型及其数组。通常,SharedPreferences数据是私有的,即每个应用只能...
SharedPreferences是Android系统提供的一种轻量级的数据存储方式,用于存储简单的键值对数据,如布尔值、整型、浮点型、字符串等。本资源将通过一个具体的例子来介绍如何使用SharedPreferences进行数据保存。 ...
在Android开发中,SharedPreferences是一个轻量级的数据存储方式,常用于保存应用的配置信息或用户设置,如登录状态、主题颜色、用户偏好等。在这个场景中,我们将详细探讨如何使用SharedPreferences来设置和修改...
在Android开发中,SharedPreferences是一个轻量级的数据存储机制,用于保存和读取少量的基本数据类型,如字符串、整型、布尔值等。它非常适合用来存储应用程序的配置信息或用户偏好设置,因为这些数据通常不需要复杂...
在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储应用程序的配置信息或者简单数据。它提供了一种键值对的方式,使得数据的存储、删除和读取变得非常方便。下面我们将...