Android中数据的存储方式(一)
2015-10-14 19:44
405 查看
程序中很重要的一部分是数据的交换,而交换中很重要一点是如何实现数据的存储。根据数据的作用,选择不同的保存方式和使用权限。Android数据的存储有如下6种:
保存数据到应用 程序私有的文件夹下
保存到公共的sd卡上
sharedpreferences保存
使用xml文件去保存
使用数据库保存
内容提供者(Content provider)
this.getCacheDir(); 对应/data/data/com.sky.qqlogin/cache
存数据
取数据
当程序的内存不够时,会优先删除cache的数据,所以平常应该把用户的信息应该保存在files文件夹下
存数据
取数据
要存储XML数据如下
存数据
取数据
存在数据过程中,一般会创建一个javabean对象,把取出的数据存起来(这样方便统一的操作)。
保存数据到应用 程序私有的文件夹下
保存到公共的sd卡上
sharedpreferences保存
使用xml文件去保存
使用数据库保存
内容提供者(Content provider)
一、保存数据到应用 程序私有的文件夹下
路径写this.getFilesDir();对应/data/data/com.sky.qqlogin/filesthis.getCacheDir(); 对应/data/data/com.sky.qqlogin/cache
存数据
File file = new File(getFilesDir(),"info.txt"); FileOutputStream out = new FileOutputStream(file); out.write((num+"#sky#"+pwd).getBytes());
取数据
File file =new File(getFilesDir(),"info.txt"); BufferedReader br = new BufferedReader(new FileReader(file)); String line = br.readLine(); String[] split = line.split("#sky"); qqnum.setText(split[0]); qqpwd.setText(split[1]);
当程序的内存不够时,会优先删除cache的数据,所以平常应该把用户的信息应该保存在files文件夹下
二、保存到公共的sd卡上
有些数据是需要共享的,如,本地的歌曲或视频,要手机内共享。可以放在/mnt/adcard公共目录下,对应的外部的sdcard。//1.拿到sd卡的目录 Environment.getExternalStorageDirectory() //2.拿到SD卡的大小 Environment.getExternalStorageDirectory().getTotalSpace //3.对文件的大小进行转换 String total = Formatter.formatFileSize(getApplicationContext(), totalSpace); String free = Formatter.formatFileSize(getApplicationContext(), freeSpace);
三、 sharedpreferences保存
有点像javaweb中servlet的request,有set、get来存取数据。这个方法产生的config.xml文件存在对应包的shared_prefs中存数据
//1.先得到对象,一般权限设置为私有 SharedPreferences sp=getSharedPreferences("config",MODE_PRIVATE); //2.得到一个编辑器 Editor edit=sp.edit(); //3.往编辑器中存值,name---value键值对 edit.putString("number",number); edit.putString("pwd",pwd); //4.数据从内存写入,这个方法要求版本9以上 edit.apply();
取数据
//1.取出数据,先拿对象 SharedPreferences sp=getSharedPreferences("config",MODE_PRIVATE); //2.由editor,相应方法 Editor edit=sp.edit(); String name=sp.get("number","");//后面的参数是设定的默认值
四、使用xml文件去保存
谷歌已经把PULL解析器集成到了eclipse中,可以直接使用。要存储XML数据如下
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <student city="shenzhen"> <name>xiaoli</name> <gender>female</gender> </student>
存数据
//1.获取File对象,并用流关联 File file=new File(getFilesDir(); OutputStream out =new FileOutputStream(file,name+".xml)); //2.得到XML的serializer对象 XmlSerializer serializer =Xml.newSerializer(); //3.serializer与文件流关联 serializer.setOutput(out,"utf-8"); //4.开头开始存取 serializer.startDocument("utf-8",true); serializer.startTag(null,"student"); //5.有属性用attribute搞进去 serializer.attribute(null, "city", city); //6.存在啊存…… serializer.startTag(null, "name"); serializer.text(name); serializer.endTag(null, "name"); serializer.startTag(null, "gender"); serializer.text(gender); serializer.endTag(null, "gender"); //7.endtag结束 serializer.endTag(null, "student"); //8.endDocument,全文结束 serializer.endDocument(); //9.关流 out.close();
取数据
存在数据过程中,一般会创建一个javabean对象,把取出的数据存起来(这样方便统一的操作)。
//1.创建解析器 XmlPullParser parser = Xml.newPullParser(); //2.创建解析器的输入流并与文件关联 FileInputStream fis = new FileInputStream(file); parser.setInput(fis, "utf-8"); //3.解析器得到 EventType() int type = parser.getEventType(); //4.一行一行走,走到相应的数,去搞数据,并记录到javabean中 while 4000 (type!=XmlPullParser.END_DOCUMENT){ if(type==XmlPullParser.START_TAG){ if("student".equals(parser.getName())){ int count = parser.getAttributeCount(); String attributeValue = parser.getAttributeValue(0); String attributeName = parser.getAttributeName(0); //5.把属性存到javabean对象中 student.setCity(attributeValue); }else if("name".equals(parser.getName())){ String sname = parser.nextText(); student.setName(sname); }else if("gender".equals(parser.getName())){ String sgender = parser.nextText(); student.setGender(sgender); } } type=parser.next(); } serializer.endTag();
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件