概述:
有些应用需要保存配置信息,如是否打开音效开关,登录时是否保存用户名密码等,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,自己根据文档编写的代码,有需要的就下载吧。
Android数据存储——SharedPreferences实现登入记住密码功能。
Android 3种数据保存(SharedPreferences存储 内部文件存储 数据库存储),如项目包有问题请联系我谢谢
使用SharedPreferences的小项目。
Jetpack DataStore 是一种改进的新数据存储解决方案,允许使用协议缓冲区存储键值对或类型化对 象。 DataStore 以异步、一致的事务方式存储数据,克服了 SharedPreferences(以下统称为SP)的 一些缺点。 DataStore ...
Android项目开发中使用的数据存储方式有:网络存储、sqlite存储、File存储和SharedPreferences存储,四种存储方式对应的Demo别人是NetworkDemo、SqliteDemo、FileDemo和SharedPreferencesDemo,根据应用的场景选择...
Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是: 1、文件存储 2、SharedPreference 存储 3、数据库存储。SharedPreferences 是使用键值对的方式来存储数据的,使用 SharedPreferences来进行数据...
前面呢,我们讲了文件的存储,文件的存储方式不适合保存一些比较复杂的文本数据。因此,我们来学习一下...SharedPreferences支持不同类型的数据存储,如果你存储的是整型,那你读取出来的也是整型,你存储的是浮点型,
程序代码 博文链接:https://prettyboy434.iteye.com/blog/724088
Android本地存储SharedPreferences详解 存储位置 SharedPreferences数据保存在: /data /data/<package> /shared_prefs 文件夹下,以XML格式保存,根元素为:。文件名称为获取SharedPreferences实例时传递的參数值。...
嵌入式Android项目设计与开发 第六章 数据存储 ——SharedPreferences 2 SharedPreferences 键值对概念: 某一个数据都由一个键和一个值构成,键代表数据的名称,它是全局唯一的。具体的数据内容存放在值中。 键值对...
Android Studio编写的Android存储示例。其中包括:使用自带的SharedPreferences存取;存储数据到内存;存储数据到SD卡;存储数据到SQLite数据库。
NULL 博文链接:https://zhujianjia.iteye.com/blog/1042048
Android使用SharedPreferences进行数据存储,缓存ID等数据
Android自学笔记-8-Android数据存储1:文件、SharedPreferences和获取sd卡信息
利用数据存储的SharedPreferences开发技术,实现了一个简易的登录界面,可以记住登录密码等。
android 使用SharedPreferences对数据存储/删除/读取/文件删除
1.掌握SharedPreferences的使用方法; 2.掌握各种文件存储的区别与适用情况; 3.了解SQLite数据库的特点和体系结构; 4.掌握SQLite数据库的建立和操作方法; 5.理解ContentProvider的用途和原理; 6.掌握...
Android使用SharedPreferences和SQLite数据库实现数据存储
申明人(签名): 实验报告评语与评分: 评阅老师签名: 一、实验名称:Android数据存储与IO 二、实验日期:2014/11/13 三、实验目的: 1、掌握SharedPreferences的存储数据的格式及位置,能够读写其他应用程序的...