安卓数据持久化:文件存储、SharedPreferences存储以及数据库存储

本文详细介绍了Android中数据持久化的三种常见方式:文件存储、SharedPreferences存储以及SQLite数据库存储。分别提供了insert、update、delete和query等操作的方法说明,帮助开发者理解和掌握如何在Android应用中进行数据管理。
摘要由CSDN通过智能技术生成
Android系统中主要提供了三种方式用于简单的实现数据持久化功能:
文件存储(手机自带的内存)、SharedPreferences存储以及数据库存储
当然还可以用sd卡存储
读入写出
下面是疯狂java讲义中的关于IO流的一些补充,回忆一下


1,文件存储
手机自带的内存,只能供当前应用程序访问,其他应用程序访问不了,程序卸载这些数据也会随着消失
原理:
基本是先获取一个文件的输出流,然后把信息write进去,最后关闭流
a,通过上下文类 context的openFileOutput()方法获得一个FileOutputStream输出流
b,要写入的内容通过write()写到FileOutputStream对象
c,关闭流
openFileOutput()可以将数据存储到指定的文件中,方法有两个参数,第一个参数是文件名,不需要带上完整的路径,因为这里都是默认存储到data/data/file下面的
第二个参数是文件的操作模式,两种:MODE_PRIVATE和MODE_APPEND.前者是覆盖,后者是追加
(MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,前者是允许只读,后者是只写,但是都被抛弃,因为不安全)
private void save(String inputText ) {
           FileOutputStream fos = null;
           BufferedWriter writer = null;
            try {
               fos = openFileOutput( "data", Context.MODE_PRIVATE);
               writer = new BufferedWriter( new OutputStreamWriter(fos));
                writer.write( inputText);
           } catch (IOException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           } finally {
                 try {
                      if( writer != null)
                            writer.close();
                }catch (IOException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                }
主要的就是上面的三句话
openFileOutput打开一个输出流,然后构建一个字节缓冲流对象然后写数据,

此外还有几个方法需要特别注意一下 ,这几个方法对于文件关系提供了更好的支持,配合上面介绍的方式, 就可以对文件的数据进行常规的CRUD操作 (增删改查),方法如下:
File getFIlesDir ():获取文件系统的绝对路径。
boolean  deleteFile(String name):删除一个指定文件名为name的文件。
String[] fileList() :当前应用内部存储路径下的所有文件名。
上一节中的保存数据到手机内存也有一些方法

 //帮助我们返回一个目录
  //context.getCacheDir ()的话就是保存到cache缓存文件夹下面     
File file=new File(context.getFilesDir(), "userinfo.txt");           
       FileOutputStream fos= new FileOutputStream( file);          
            //zhangsan 123
            fos.write(( username+ "##"+ password).getBytes());
            fos.close();

也是可以保存数据的         
---------------------
来看看读数据
读数据也是主要是用到一个打开输入的函数 openFileInput
private void read( ) {
           FileInputStream fis= null;
           BufferedReader reader = null;

           StringBuilder sb=new StringBuilder();
            try {
               fis= openFileInput( "data");
             reader= new BufferedReader( new InputStreamWriter(fis));
               String line="";
               while((line=reader.readerLine())!=null){
                   sb.append(line)
                    }
           } catch (IOException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           } finally {
                 try {
                      if( reader!= null)
                            reader.close();
                }catch (IOException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                }
主界面中
String inputText = load();
if (!TextUtils.isEmpty(inputText)) {
edit.setText(inputText);
edit.setSelection(inputText.length());
Toast.makeText(this, "Restoring succeeded",
Toast.LENGTH_SHORT).show();
}

setSelection()方法将输入光标移动到文本的末尾位置以便再次输入
TextUtils.isEmpty()方法可以一次性进行两种空值的判断,当传入的字符串为空或者是null的时候都会返回true

总的来说文件存储不适合用于保存复杂的数据
------------------------------------------------------------------------------------------------------------------------
2,SharedPreferences存储
首先来看存储数据
SharedPreferences存储是利用键值对的方式来存储的,感觉有点类似map集合
要使用该方法来存储数据就要先 获得一个SharedPreferences对象,有三种获取方法
a,Context上下文类中的getSharedPreferences
两个参数,第一个是指定文件的名称,不在就创建。目录也是在data/data/包名/shared_prefs目录下
第二个参数是操作模式。MODE_PRIVATE是默认的,只允许当前的应用程序对其进行操作,MODE_MULTI_PROCESS是一般用于有多个进程中对同一个SharedPreferences文件进行读写的情况,同样有MODE_WORLD_WRITEABLE MODE_WORLD_READABLE两个被废弃的模式
b,Activity类中的getPreferences
只有一个参数,也是操作模式,文件的名称是默认的当前活动的类名
c,PreferenceManager管理类中的getDefaultSharedPreferences()
管理类中的一个静态方法,接收一个context参数,自动把当前的包名作为文件命名的前缀

得到一个对象之后,有三步来进行数据的存储
1,调用对象的edit方法获得一个SharedPreferences.Editor对象
2,向.Editor对象添加数据,putBoolean()或者是putString(),,等等putXXX()方法
3,调用commit方法将添加的数据提交,完成数据的存储操作
看一个实例:
@Override
public void onClick(View v) {
      // TODO Auto-generated method stub
 SharedPreferences.Editor editor=getSharedPreferences( "data", MODE_PRIVATE).edit();
             editor.putString( "name", "hl174");
             editor.putInt( "a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值