您的位置:首页 > 移动开发 > Android开发

Android中数据的存储方式(一)

2015-10-14 19:44 405 查看
程序中很重要的一部分是数据的交换,而交换中很重要一点是如何实现数据的存储。根据数据的作用,选择不同的保存方式和使用权限。Android数据的存储有如下6种:

保存数据到应用 程序私有的文件夹下

保存到公共的sd卡上

sharedpreferences保存

使用xml文件去保存

使用数据库保存

内容提供者(Content provider)

一、保存数据到应用 程序私有的文件夹下

路径写this.getFilesDir();对应/data/data/com.sky.qqlogin/files

this.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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息