AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第五章 数据存储技术_第1页
AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第五章 数据存储技术_第2页
AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第五章 数据存储技术_第3页
AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第五章 数据存储技术_第4页
AndroidStudio项目开发教程-从基础入门到乐享开发 课件 第五章 数据存储技术_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章数据存储技术安卓·入门与开发目录5.1 SharedPreferences存储5.2 文件存储5.3 购物商城的信息存储5.1 SharedPreferences存储

Android系统提供了轻量级的数据存储方式——SharedPreferences存储类。它屏蔽了对底层文件的操作,通过为程序开发人员提供简单的编程接口,实现以最简单的方式对数据进行永久保存。这种方式主要对少量的数据进行保存,比如对应用程序的配置信息、手机应用的主题、游戏的玩家积分等进行保存。例如,对微信进行通用设置后可以对相关配置信息进行保存,进行通用设置的界面如图5.1所示;对手机微博客户端设置应用主题后就可以对该主题进行保存,设置应用主题的界面如图5.2所示。图5.1微信通用设置图5.2设置微博主题5.1SharedPreferences存储目录5.1 SharedPreferences存储5.1.1获取SharedPreferences对象5.1.2向SharedPreferences文件存储数据5.1.3读取SharedPreferences文件中存储的数据5.1.1获取SharedPreferences对象使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。SharedPreferences类位于android.content包中,用于使用键值(key-value)对的方式来存储数据。该类主要用于boolean、float、int、long、String等基本类型。在应用程序结束后,数据仍旧会保存。数据是以XML文件格式保存在Android手机系统下的“/data/data/<应用程序包名>/shared_prefs”目录中,该文件被称为SharedPreference(共享的首选项)文件。使用Context类中的getSharedPreferences方法获取如果需要多个使用名称来区分的SharedPreferences文件,则可以使用getSharedPreferences方法获取,该方法的基本语法格式如下:getsharedPreferences(Stringname,

intmode)使用Activity类中的getPreferences方法获取如果Activity仅有一个默认的SharedPreferences文件,则可以直接使用getPreferences方法获取。该方法的语法格式如下:其中,参数mode的取值同getSharedPreferences方法相同。5.1SharedPreferences存储getPreferences(intmode)目录5.1 SharedPreferences存储5.1.1获取SharedPreferences对象5.1.2向SharedPreferences文件存储数据5.1.3读取SharedPreferences文件中存储的数据5.1.2向SharedPreferences文件存储数据向SharedPreferences文件中存储数据的步骤如下:(1)调用SharedPreferences类的edit方法获得SharedPreferences.Editor对象。(2)向haredPreferences.Editor对象中添加数据。例如,调用putBoolean方法添加布尔型数据、调用putString方法添加字符串数据、调用putInt方法添加整型数据。(3)使用commit方法提交数据,从而完成数据存储操作。5.1SharedPreferences存储目录5.1 SharedPreferences存储5.1.1获得SharedPreferences对象5.1.2向SharedPreferences文件存储数据5.1.3读取SharedPreferences文件中存储的数据从SharedPreferences文件中读取数据时,主要使用SharedPreferences类的getXxx方法,如下所示。//读取所有数据abstractMap<String,?>getAll()//读取的数据为boolean类型abstractbooleangetBoolean(Stringkey,booleandefValue)//读取的数据为float类型abstractfloatgetFloat(Stringkey,floatdefValue)//读取的数据为int类型abstractintgetInt(Stringkey,intdefValue)//读取的数据为long类型abstractlonggetLong(Stringkey,longdefValue)//读取的数据为String类型abstractStringgetString(Stringkey,StringdefValue)//读取的数据为Set<String>类型abstractSet<String>getStringSet(Stringkey,Set<String>defValues)5.1.3读取SharedPreferences文件中存储的数据5.1SharedPreferences存储介绍了SharedPreferences的读取和写入,下面通过具体代码,举例总结下SharedPreferences的使用方法。具体代码参考书上128页-130页。目录5.1 SharedPreferences存储5.2 文件存储5.3 购物商城的信息存储学习过JavaSE的读者都知道,在Java中提供了一套完整的I/O流体系,通过这些I/O流可以很方便地访问磁盘上的文件内容。在Android中也同样支持以这种方式来访问手机存储器上的文件。例如,对游戏需要使用的资源文件进行下载并存储在手机中的指定位置,如图5.3所示:再如,将下载的歌曲存储在手机的指定路径下,如图5.4所示。图5.3下载并保存资源文件

图5.4已下载的歌曲文件5.2 文件存储5.2文件存储目录5.2 文件存储5.2.1 内部存储5.2.2 外部存储5.2.1内部存储使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。内部存储位于Android手机系统下的“/data/data/<包名>/files”目录中。使用Java提供的I/O流体系可以很方便地对内部存储的数据进行读写操作。其中,FileOutputStream类的openFileOutput)方法用来打开相应的输出流;而FilelnputStream类的openFilelnput方法用来打开相应的输入流。默认情况下,使用I/O流保存的文件仅对当前应用程序可见,对于其他应用程序(包括用户)是不可见的(即不能访问其中的数据)。说明:如果用户卸载了应用程序,则保存数据的文件也会一起被删除。5.2文件存储1.写入文件使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。要实现向内部存储器中写入文件,首先需要获取文件输出流对象FileOutputStream,这可以使用FileOutputStream类的openFileOutput方法来实现,然后再调用FileOutpitStream对象的write方法写入文件内容,最后调用close方法关闭文件输出流对象。具体代码如下。5.2文件存储StringfileName="data.txt";Stringcontent="helloworld";FileOutputStreamfos;try{//打开应用程序中对应的输出流fos=openFileOutput(fileName,MODE_PRIVATE);//将数据存储到指定的文件中fos.write(content.getBytes()); //关闭输出流fos.close(); }catch(Exceptione){e.printStackTrace();}2.读取文件使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。要实现读取内部存储器中的文件,首先需要获取文件输入流对象FilelnputStream,这可以使用FileInputStream类的openFileInput方法来实现,然后再调用FileInputStream对象的read方法读取文件内容,最后调用close方法关闭输入流对象。具体代码如下。5.2文件存储Stringcontent="";FileInputStreamfis;try{//打开应用程序中对应的输入流fis=openFileInput("data.txt");//创建缓冲区并获取文件长度byte[]buffer=newbyte[fis.available()];//将文件内容读取到buffer缓冲区中fis.read(buffer);//将读取到的内容转换成指定字符串content=newString(buffer);//关闭输入流fis.close();}catch(Exceptione){e.printStackTrace();}目录5.2 文件存储5.2.1 内部存储5.2.2 外部存储5.2.2外部存储使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。外部存储是指将文件存储到一些外部设备上(通常位于mnt/sdcard目录下,不同厂商生产的手机路径可能不同),属于永久性的存储方式。每个Android设备都支持共享的外部存储用来保存文件,它也是手机中的存储介质。保存在外部存储空间的文件都是全局可读的,而且在用户使用USB连接电脑后,可以修改这些文件。在Android程序中,对外部存储的文件进行操作时,需要使用Environment类的getExternalStorageDirectory方法,该方法用来获取外部存储器的目录。5.2文件存储5.2.2外部存储使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。说明:为了读、写外部存储上的数据,必须在应用程序的全局配置文件(AndroidManifest.xml)中添加读、写外部存储的权限。配置如下:5.2文件存储<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>往外部存储空间写入和读取文件的方法,与内部存储类似,都是采用文件输入输出流的形式。使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。1.写入文件。使用FileOutputStream文件输出流对象,将数据存入,具体代码如下:5.2文件存储Stringstate=Environment.getExternalStorageState();//1.输入流获取外部设备。//2.判断外部设备是否可用获取SD卡目录。if(state.equals(Environment.MEDIA_MOUNTED)){FileSDPath=Environment.getExternalStorageDirectory();Filefile=newFile(SDPath,"data.txt");Stringdata="HelloWorld";FileOutputStreamfos;try{//3.将数据存储到SD卡中。 fos=newFileOutputStream(file); fos.write(data.getBytes());//4.关闭文件输出流对象。 fos.close();}catch(Exceptione){ e.printStackTrace();}}5.2.2外部存储使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。2.读取文件。使用FileInputStream文件输入流对象,读取数据。具体代码如下:5.2文件存储Stringstate=Environment.getExternalStorageState();//1.获取外部设备。//2.判断外部设备是否可用获取SD卡目录。if(state.equals(Environment.MEDIA_MOUNTED)){FileSDPath=Environment.getExternalStorageDirectory();Filefile=newFile(SDPath,"data.txt");FileInputStreamfis;try{ //3.获取指定文件对应的输入流fis=newFileInputStream(file);//4.将文件输入流对象fis包装成BufferReader对象BufferedReaderbr=newBufferedReader(newInputStreamReader(fis));//5.读取文件内容Stringdata=br.readLine();//6.关闭输入流fis.close();}catch(Exceptione){ e.printStackTrace();}}5.2.2外部存储目录5.3 购物商城的信息存储5.3.1 用户注册信息的存储5.3.2 免验证快速登录功能5.3.3 退出清除SharedPreferences5.3.1用户注册信息的存储用户信息写入内部文件文件效果图本章学习了文件存储的两种方式,可以用文件存储常用的内部存储来保存用户注册的信息。改进用户注册模块,实现用内部文件进行存储用户有效信息功能。具体步骤如下:

1.重写RegisterActivity类“确定”按钮的监听事件,判断用户信息输入有效后定义内部文件名称filename为“usrinfo.txt”,用户存储用户信息。2.定义“splitstr”字符,用于分割信息便于存储。3.定义输出流FileOutputStream,并以MODE_PRIVATE方式初始化,表示文件只能被创建它的程序访问。4.依次写入用户名、密码、手机、邮箱等信息数据并用splitstr分隔符隔开;5.最后用fos.close()关闭输出流,并提示用户已存储成功。6.注册成功后,用意图跳转至登录页面。5.3购物商城的信息存储具体代码参考书上135页-136页目录5.3 购物商城的信息存储5.3.1 用户注册信息的存储5.3.2 免验证快速登录功能5.3.3 退出清除SharedPreferences使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。5.3.2免验证快速登录功能购物商城在人们日常生活中会经常用到,如果每次都要输入账号密码才能使用,难免会感到麻烦。用本章学到的SharedPreferences存储方式来记住密码,实现免验证快速登录功能。实现效果如下:<CheckBoxandroid:id="@+id/mr_check"android:layout_width="wrap_content"android:layout_height="wrap_content"android:checked="false"android:text="记住密码"/>1、

在activity_login.xml页面的密码框下面增加CheckBox组件,用来表示是否记住密码。checked为false表示默认不记住。运行项目,展示效果如图5.6所示:图5.6登录-记住密码效果图5.3购物商城的信息存储使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。2、在后台LoginActivity中声明CheckBox组件和SharedPreferences对象,5.3购物商城的信息存储privateCheckBoxck_box;//是否记住密码privateSharedPreferencessp;//声明Sharedpreferenced对象3、

在LoginActivity类的onCreate方法里进行初始化,并创建一个名为UserData的对象ck_box=(CheckBox)findViewById(R.id.mr_check);sp=getSharedPreferences("UserData",Context.MODE_PRIVATE);5.3.2免验证快速登录功能使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。4、

在LoginActivity类的onClick方法里获取SharedPreferences的editor对象,通过editor对象写入数据,存储当前用户信息并设置记住登录状态loginStatus为true,然后根据checkBox的选中状态,更改是否记住密码isRememberPwd的状态。最后提交editor对象。5.3购物商城的信息存储//获取到edit对象SharedPreferences.Editoredit=sp.edit();//通过editor对象写入数据存储当前用户信息edit.putString("user",user);edit.putString("pwd",pwd);edit.putBoolean("loginStatus",true);//记住登录状态if(ck_box.isChecked()){//记住密码选中edit.putBoolean("isRememberPwd",true);//是否记住密码}else{//记住密码没选中edit.putBoolean("isRememberPwd",false);//是否记住密码}//提交数据存入到xml文件中mit();Intentintent=newIntent(LoginActivity.this,MainActivity.class);//用SharedPreferences存储用户信息,可省略意图传递数据数据intent.putExtra("user",user);intent.putExtra("pwd",pwd);//startActivity(intent);这种启动方式,并不能返回结果startActivityForResult(intent,1);5.3.2免验证快速登录功能使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。5、

在登录成功后跳转至MainActivity类,在MainActivity类声明Sharedpreference对象,并在onCreate方法里,获取用户信息缓存,在if语句里增加判断上次退出应用前,用户是否登记状态以及是否记住密码,如果满足条件则跳转至个人中心,具体代码如下:5.3购物商城的信息存储privateSharedPreferencessp;//声明Sharedpreferenced对象//获取用户信息缓存sp=this.getSharedPreferences("UserData",Context.MODE_PRIVATE);if(!"".equals(user)&&user!=null&&!"null".equals(user)){radioGroup.check(R.id.mr_mine);//登录成功展示个人中心}elseif(sp.getBoolean("loginStatus",false)&&sp.getBoolean("isRememberPwd",false)){//判断上次是否登录状态以及是否记住密码,如果是则默认跳转个人中心radioGroup.check(R.id.mr_mine);}else{radioGroup.check(R.id.mr_shoppingmall);//默认展示商城界面}5.3.2免验证快速登录功能使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。6、跳转至个人中心MineFragment,在MineFragment里先声明登录状态loginStatus和声明Sharedpreferenced对象。5.3购物商城的信息存储privateBooleanloginStatus; //登录状态privateSharedPreferencessp; //声明Sharedpreferenced对象5.3.2免验证快速登录功能publicvoidinitView(Viewview){super.initView(view);login=(TextView)view.findViewById(R.id.custom_login);sp=getActivity().getSharedPreferences("UserData",Context.MODE_PRIVATE);}7、在MineFragment的initView方法里初始化Sharedpreferenced对象。使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。8、在MineFragment的onCreateView方法里获取用户信息缓存,在if语句里增加判断上次退出应用前用户是否登记状态以及是否记住密码,如果满足条件则在显示用户信息,并记住当前登录状态loginStatus为true。5.3购物商城的信息存储if(!"".equals(user)&&user!=null&&!"null".equals(user)){Toast.makeText(getActivity(),"跳转个人中心成功!账号为"+user+",密码为"+pwd,Toast.LENGTH_LONG).show();login.setText(user);loginStatus=true;}elseif(sp.getBoolean("loginStatus",false)&&sp.getBoolean("isRememberPwd",false)){//上次是否登录以及是否记住密码,如果是则加载个人信息user=sp.getString("user",null);pwd=sp.getString("pwd",null);login.setText(user);//展示个人信息loginStatus=true;//设置登录状态}else{login.setText("登录/注册");loginStatus=false;}5.3.2免验证快速登录功能使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。9、在MineFragment类的onCreateView方法初始化时,重写并调用setListener(),给“登录/注册”文本设置单击事件监听,点击“登录/注册”文本,如果当前用户为非登录状态则跳转至登录页面,如果为登录状态则弹出是否退出登录对话框。具体代码如下:

5.3购物商城的信息存储/***设置监听*/@OverridepublicvoidsetListener(){login.setOnClickListener(this);}@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.custom_login://登录注册文本框Toast.makeText(getActivity(),"loginStatus:"+loginStatus,Toast.LENGTH_SHORT).show();if(loginStatus==true){//当前为登录状态时,弹框询问用户是否注销用户showNormalDialog();}else{//当前为非登录状态时,跳转至登录页面Intentintent=newIntent(getActivity(),LoginActivity.class);startActivity(intent);}break;}}5.3.2免验证快速登录功能使用Activity类中的getPreferences方法获取如果Activity仅需要一个SharedPreferences文件,则可以使用getPreferences方法获取。因为只有一个文件,所以不需要提供名称。该方法的语法格式如下:getPreferences(intmode)其中,参数mode的取值同getSharedPreferences方法相同。10、showNormalDial

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论