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

程序中很重要的一部分是数据的交换,而交换中很重要一点是如何实现数据的存储。根据数据的作用,选择不同的保存方式和使用权限。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(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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值