Android持久化方案

Android中的持久化方式主要有三种:

  • 文件存储
  • SharedPreference存储
  • 数据库存储

 

一、文件存储

             文件存储是将数据原封不动地保存到文件中,适用于一些简单的额文本数据或者二进制数据。

  存数据 

    /*
    * 该方法可以利用指定context,将数据保存到指定文件中
    * */
    public static void saveDataToFile(Context context,String fileName, String data){
        FileOutputStream outputStream = null;
        BufferedWriter writer = null;

        try {
            outputStream = context.openFileOutput(fileName,Context.MODE_PRIVATE);
            writer = new BufferedWriter(new OutputStreamWriter(outputStream));
            writer.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

         存数据主要用到了Context的openFileOutput(String fileName,int mode)方法,该方法可以在底层产生一个FileOutputStream对象,然后用BufferedWriter等包装类对其进行包装后,就可以对指定文件进行写数据了。其中的mode是 文件操作模式,有MODE_PRIVATE和MODE_APPEND两种模式,前者是默认的,后者是当文件存在的时候,数据以追加的方式写入文件。

         当在一个Context调用该方法时,会在 data/data/工程包名/files 目录下发现保存刚刚数据的文件。

从文件中读取数据

    public static String readDataFromFile(Context context,String fileName){
        FileInputStream in = null;
        BufferedReader reader = null;
        StringBuilder content = new StringBuilder();
        try {
            in = context.openFileInput(fileName);
            reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = reader.readLine()) != null){
                content.append(line);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if (reader != null){
                try {
                    reader.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
        return content.toString();
    }

读数据也是去data/data/工程包名/files 目录下寻找名为fileName的文件读取数据。

 

二、SharedPreference存储

           SharedPreferences是用 键值对 的方式存储数据的,并且保存的当保存一条数据的时候,需要给这条数据提供一个对应的key,然后在读取该数据的时候通过该key读取。

1、存数据到SharedPreferences中

       首先,得获取 SharedPreferences对象,获取该对象有3种方式

  • Context类的 getSharedPreferences(String fileName,int mode) 方法
  • Activity类的 getPreferences() 方法 (会以当前app的包名命名文件)
  • PreferenceManager类的 getDefaultSharedPreferences() 方法 (静态方法)

然后,利用它的edit()方法产生Editor对象,利用 editor对象 添加数据,最后提交

SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","Tom");
editor.putInt("age",25);
editor.putBoolean("married",false);
editor.apply();

2、利用SharedPreferences从文件中读取数据

     读取数据只需用到SharedPreferences对象

SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name","");
int age = pref.getInt("age",0);
boolean married = pref.getBoolean("married",false);

 

三、SQLite存储

         SQLite是Android中内置的一款轻量级的关系型数据库,它的运算速度非常快,占用资源少。Android中提供了一个SQLiteOpenHelper帮助抽象类,借助这个类可以对数据库进行创建和升级。利用SQLiteOpenHelper中的getReadableDatabase()和getWritableDatabase()方法可以获取对数据库进行读和写的对象。

1、利用原生sqlite操作数据库

操作步骤:

  •   创建一个类MyDatabaseHelper继承SQLiteOpenHelper
  • 当想访问或者创建某个数据库的时候,new MyDatabaseHelper()创建一个Helper,让Helper与某个数据库相关联
  •  SQLiteDatabase db= helper.getWritableDatabase();或者SQLiteDatabase db= helper.getReadableDatabase();可以获取数据库对象
  • 利用db.execSQL()或者db.rawQuery(),可以执行sql语句

2、利用LitePal框架操作数据库

        LitePal框架对原生sqlite进行了封装,它是一个ORM框架,使得对数据库的操作更加方便,可直接使用java bean

操作步骤:

  • 在app/build.gradle文件中的dependencies中添加依赖 implementation 'org.litepal.android:core:1.3.2'
  • 在main/assets目录下创建litepal.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
    //数据库名
    <dbname value="Books"></dbname>
    //数据库版本号
    <version value="1"></version>

    //待映射的Java对象
    <list>
        <mapping class="com.example.yy.demos.Litepal.Book"></mapping>
    </list>
</litepal>
  • 创建Java Bean类
public class Book extends DataSupport {
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;

    /************getters and setters***********/
    /....../
}

 

  • 在AndroidManifest.xml文件的<application>标签下添加item:
android:name="org.litepal.LitePalApplication"
  • 然后就可以使用litepal操作数据库了
  • 获取/创建数据库:
SQLiteDatabase db = Connector.getDatabase();
  • 插入数据
Book book = new Book();
book.setName("The Da Vinci Code");
book.setAuthor("zz");
book.setPages(454);
book.setPrice(16.23);
book.save();//插入
  • 修改数据
book.setPrice(10.66);
book.save();
  • 删除数据
DataSupport.delete(Book.class,3);//删除id为3的Book记录
DataSupport.deleteAll(Book.class,"price < ?","17");//删除price<17的所有Book记录
  • 查询数据
//select * from book
List<Book> books = DataSupport.findAll(Book.class);
//查询第一条记录
Book firstBook = DataSupport.findFirst(Book.class);
//查询最后一条记录
Book lastBook = DataSupport.findLast(Book.class);
//查询name和author两列
List<Book> bookList = DataSupport.select("name","author").find(Book.class);
//条件查询,pages>400的Book
List<Book> list = DataSupport.where("pages > ?","400").find(Book.class);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值