付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、title: Android基础入门 categories: Android6.2 数据与之SharedPreferen保存用户偏好参数基础入门,Android基础入门SharedPreferen6.2 数据保存用户偏好参数与之本节引言:1.SharedPreferen使用流程图:使用示例:本节给大家介绍的是第二种用户数据的方式,使用SharedPreferen(保存用户偏好参数)保存数据,当的应用想要保存用户的一些偏好参数,比如是否自动登陆,是否记住账号,是否在Wifi下才能联网等相关信息,如果使用数据库的话,显得有点大材小用了!把上面这些配置信息称为用户的偏好设置,就是用户偏好的设置,而这
2、些配置信息通常是保存在特定的文件中!比如windows使用ini文件,而J2SE中使用properties属性文件与xml文件来保存的配置信息;而在Android中通常使用 一个轻量级的类SharedPreferen来保存用户偏好的参数!SharedPreferen也是使用 xml文件,然后类似于Map集合,使用键-值的形式来数据;只需要调用SharedPreferen的 get(name),就可以根据键获得对应的值!使用起来很方便!实现代码示例:运行效果图:流程是输入账号后点击登录,将信息保存到SharedPreference文件中,然后重启app,看到数据已经显示在文本框中了另外保存后,可
3、以在File Expoler打开data/data/可以看到在shared_prefs目录下生成了一个xml文件(因为N5没root,这里找了以前的效果图):点击导出到桌面可以看到里面的内容:代码实现:布局文件activity_main.xml的编写:.编写简单的SP工具类:SharedHelper.java:.0.1.2.3./* Created by Jay on 2015/9/2 0002.*/public class SharedHelper private Context Context;public SharedHelper() public SharedHelper(Contex
4、t Context) this. Context = Context;4.5.6.7.8./定义一个保存数据的方法public void save(String userna e, String passwd) SharedPreferen Context.MODE_PR VA E);SharedPreferensp = Context.getSharedPreferen( ysp,9.0.1.2.3.Editor editor = sp.edit();editor.putString(userna e, userna e); editor.putString(passwd, passwd);
5、 editor.co it();oast. ake ext( Context, 信息已写入SharedPreference中, oast.show();ENGH_SHOR)4.5.6.7.8.9./定义一个SP文件的方法public Map read() Map data = new HashMap();SharedPreferensp = Context.getSharedPreferen( Context.MODE_PR VA E);data.put(userna e, sp.getString(userna e, );data.put(passwd, sp.getString(passw
6、d, ); return data;ysp,0.1.2.3.4.最后是MainActivity.java实现相关逻辑:.0.1.2.3.4.5.6.7.8.9.0.1.2.3public class MainActivity extends AppCo ptivity private private private private private private privateEdit ext editna e;Edit ext editpasswd;Button String Stringbtnlogin; strna e; strpasswd;SharedHelper sh;Context
7、 Context;Overrideprotected void onCreate(Bundle saved nstane) super.onCreate(saved nstane);setContentView(R.layout.activity_ ain); Context = getApplicationContext();sh = new SharedHelper( Context);bindViews();private void bindViews() editna e = (Edit ext)findViewBy d(R.id.editna e);editpasswd = (Edi
8、t ext)findViewBy d(R.id.editpasswd); btnlogin = (Button)findViewBy d(R.id.btnlogin);4.5.6.7.8.9.0.1.2.3.4.5.6.7.8.9.0.1.btnlogin.setOnClick istener(new View.OnClick istener() Overridepublic void onClick(View v) strna e = editna e.get ext().toString(); strpasswd = editpasswd.get ext().toString(); sh.
9、save(strna e,strpasswd););Overrideprotected void onStart() super.onStart();Map data = sh.read(); editna e.set ext(data.get(userna e); editpasswd.set ext(data.get(passwd);2.其他应用的SharedPreferen实现流程图:获得其他app的Context,而这个Context代表该app的全局信息的接口,而决定应用的唯一标识是应用的包名,所以可以通过应用包名获得对应app的Context另外有一点要注意的是:其他应用的SP文件
10、是否能被读写的前提就是SP文件是否指定了可读或者 可写的权限,上面创建的是MODE_PRIVATE的就不可以了所以说你像读别人的SP里的数据,很难,另外,一些关键的信息,比如保存到SP里,一般都是会做加密的,所以只能自己写自己玩等下会讲下常用的MD5加密方法!代码示例:运行效果图:代码实现:SP的操作放在MainActivity.java中完成,点击按钮后SP,并通过Toast显示出来:.0.1.2.3.4.5.6.public class MainActivity extends AppCo ptivity private Context othercontext;private Share
11、dPreferensp;Overrideprotected void onCreate(Bundle saved nstane) super.onCreate(saved nstane);setContentView(R.layout.activity_ ain);Button btnshow = (Button) findViewBy d(R.id.btnshow); btnshow.setOnClick istener(new View.OnClick istener() Overridepublic void onClick(View v) /获得第一个应用的包名,从而获得对应的Cont
12、ext,需要对异常进行捕获 try othercontext = createPackageContext(co .jay.sharedpreferencede o, Context.CON EX _ GNORE_SECUR Y);7.8.9.0.1. catch (PackageManager.Na eNotFoundException e) e.prStack race();/根据Context取得对应的SharedPreferen sp = othercontext.getSharedPreferen( ysp, Context.MODE_WOR D_READABE);2.3.4.Str
13、ing String oast.na ena e = sp.getString(userna e, ); passwd = sp.getString(passwd, );ake ext(getApplicationContext(), De o1的SharedPreference存的n用户名为:);n为:passwd, oast. ENG H_SHOR ).show();5.6.7.8.3.使用MD5对SharedPreference的重要数据进行加密 如果root了,然后数据给其他应用获取到,然后造成了一些,这.就不怪了,哈哈,总不能 谁叫你root了,这锅不背,的确是这样!但是作为一名有责
14、任心的APP开发 这样是吧,可以使用一些加密算法对用户进行加密,另外一般加密的都是用户! 下面简画个简单的图帮助大家理解下加密的处理的流程:1.简单的加理流程流程图如下:嘿嘿,上面这样直接把账号保存到sp里,如果没root机,别的应用倒无法,流程图:Step 1.用户账号,账号成功后,校验后(账号是否重复,位数 6位等),即账号有效,提交给服务器的账号,以及本地加密过的!Step 2.服务器端将用户提交的账号,加密过的保存到服务端的数据库中,也就是服务端并不会保存的明文(原始)!Step 3.说回客户端,如果成功或者登陆成功,你想保存账号到SP中,保存的的也需要走一趟加密流程!即明文加密,再保
15、存!如果不保存,每次请求的时候,明文也要走一趟家里流程,然后拿着加密后的来请求服务器!Step 4.服务器验证账号以及加密着,成功,分配客户端一个ses标识,后续客户端可以拿这个ses来服务端提供的相关服务!嘿嘿,理解了吧,加密的方法有很多种,小猪也不是这方面的高玩,以前使用过的加密方法是MD5加密,本节也给大家简单介绍一下这个MD5加密,以及演示下用法2.MD5简单介绍:1)MD5是什么鬼?:答:Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护摘自百科2)MD5能吗?3)MD5值唯一吗?3.
16、MD5加密实现例子:其实网上有很多写好的MD5的例子,或者谷歌一搜一大堆,这里提供下小猪用的MD5加密工具类!Md5Util.java:.0./* Created by Jay on 2015/9/2 0002.*/public class MD5 public sic String getMD5(String content) try MessageDigest digest = MessageDigest.get nstance(MD5);digest.update(content.getBytes();return geshString(digest); catch (NoSuchAlg
17、orith Exception e) 答:不唯一,一个原始数据只对应一个MD5值,但是一个MD5值可能对应多个原始数据!答:MD5不可逆,就是说没有对应的算法,无法从生成的md5值逆向得到原始数据!当然除外,简单的MD5加密后可以查MD5库简单点说就是一种加密算法,可以将一个字符串,或者文件,压缩包,执行MD5加密后,就可以生产一个固定长度为128bit的串!这个串基本唯一!另外 都知道:一个十六进制需要用4个bit来表示,那么对应的MD5的字符串长度就为:128 / 4 = 32位了!另外可能你看到一些md5是16位的,只是将32位MD5码去掉了前八位以及后八位!不信么, 来试试一下:md5
18、,第一个:h/1.2.3.4.5.6.7.8.9.0.1.2.3.4.e.prStack race();return null;private sic String geshString(MessageDigest digest) StringBuilder builder = new StringBuilder(); for (byte b : digest.digest() builder.append( nteger.toHexString(b 4) & 0 xf); builder.append( nteger.toHexString(b & 0 xf);return builder.
19、toString();MainActivity.java直接调用getMD5这个静态方法:.og.e(HeHe, MD5.getMD5(呵呵);可以看到Logcat上打印出:这就是加密过后的呵呵了,可以把这串密文拷贝到上面这个md5的:嘿嘿,果然,只是这样加密一次,就直接就是将加密后的字符串再加密,重复100次,了,有点不安全的样子,那就加密100次咯,在原先的基础上加个加密一百次的方法:.public sString for(s1returnic String getMD5x100(String content) s1 = content;i = 0;i 100;i )= getMD5(s1
20、);s1;然后调用下,发现打印这个的Log:界面上:好的, 成功4.SharedPreference工具类:SPUtils.java.0.1.2.3.4.5.package co .jay.sharedpreferencede o3;i port android.content.Context;i port android.content.SharedPreferen ;i port java.util.Map;/* Created by Jay on 2015/9/2 0002.*/public class SPUtils /* 保存在里的SP文件名*/public s ic final S
21、tring F E_NAME = y_sp;每次都要自行实例化SP相关的类,肯定很麻烦,这里贴个SP的工具类,大家可以贴到自己的项目中,工具类来源于鸿洋大神的blog6.7.8.9.0.1./* 保存数据*/ public sic void pontext context, String key, Object obj) sp = context.getSharedPreferen(F E_NAME, context.MOSharedPreferen VA E);SharedPreferenDE_PR2.3.4.5.6.7.8.9.0.1.2.3.4.5.6.7.8.9.0.1.2.Edito
22、r editor = sp.edit();if (obj instanceof editor.put) (key, () obj); else if (obj instanceof Float) editor.putFloat(key, (Float) obj); else if (obj editor.pu else if (obj editor.put else instanceof nteger) (key, ( nteger) obj);instanceof ong) ong(key, ( ong) obj);editor.putString(key, (String) obj);ed
23、itor.co it();/* 获取指定数据*/public sic Object get(Context context, String key, Object defaultObj) SharedPreferen VA E);sp = context.getSharedPreferen(F E_NAME, context.MODE_PR3.4.5.6.7.8.9.0.1.2.3.4.5.6.7.8.9.0.1.if (defaultObj instanceof) return sp.get(key, () defaultObj); else if (defaultObj instanceo
24、f Float) return sp.getFloat(key, (Float) defaultObj); else if (defaultObj instanceof nteger) return sp.ge(key, ( nteger) defaultObj); else if (defaultObj instanceof ong) return sp.get ong(key, ( ong) defaultObj); else if (defaultObj instanceof String) return sp.getString(key, (String) defaultObj);re
25、turn null;/* 删除指定数据*/public sic void re ove(Context context, String key) SharedPreferen VA E);SharedPreferensp = context.getSharedPreferen(F E_NAME, context.MODE_PR2.3.Editor editor = sp.edit();editor.re ove(key);4.5.6.7.8.9.0.1.2.editor.co it();/* 返回所有键值对*/public sic Map getAll(Context context) SharedPreferensp = cont
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乒乓球拍制作工岗前培训效果考核试卷含答案
- 纸张整饰工风险识别知识考核试卷含答案
- 2026年新科教版初中七年级科学下册第一单元植物生殖生长发育卷含答案
- 电气设备点检员安全生产知识竞赛考核试卷含答案
- 2026年新科教版初中九年级美术上册第一单元美术主题创作卷含答案
- 紫胶漂白工岗前客户服务考核试卷含答案
- 硅片研磨工安全生产知识竞赛考核试卷含答案
- 2026年新科教版初中八年级地理上册第一单元中国人口民族特征卷含答案
- 2026年人教版高三下册英语月考试卷(附答案及解析)
- 化工添加剂生产工岗前标准化考核试卷含答案
- 抖音小店出售协议书
- qdslrdashboard应用软件使用说明
- 中国传统故事英文哪吒闹海二篇
- 工厂质量激励实施方案
- YY/T 0128-2004医用诊断X射线辐射防护器具装置及用具
- YY 1413-2016离心式血液成分分离设备
- GB/T 41498-2022纤维增强塑料复合材料用剪切框测定面内剪切应力/剪切应变响应和剪切模量的试验方法
- GB/T 1732-1993漆膜耐冲击测定法
- 常见基坑支护形式解析讲义198
- 实验室岗位安全风险告知卡
- GB∕T 6546-2021 瓦楞纸板边压强度的测定
评论
0/150
提交评论