Android离线存储方案
一、持久化技术简介
数据持久化技术是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失,Android的持久化技术主要有三种实现方式:文件存储、SharedPreferences和数据库存储,接下来我们将对这三种数据持久化方式逐一进行介绍。
二、文件存储
将数据存储到文件中
文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中,因而它比较适合用于存储一些简单的文本数据或二进制数据。
使用步骤:
调用openFileOutput(文件名称,操作模式)方法获取输出流。
使用io操作将数据存储到文件中。
示例代码:
public void save(String data){ OutputStream out; BufferedWriter writer=null; try { out=openFileOutput("data",MODE_PRIVATE);//获取输出流 writer=new BufferedWriter(new OutputStreamWriter(out)); writer.write(data); } catch (Exception e) { e.printStackTrace(); } finally { if(writer!=null){ try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } }
从文件中读取数据
使用步骤:
调用openFileInput(文件名称)方法获取输入流。
使用io操作将数据存储到文件中。
示例代码:
public String read(){ InputStream in; BufferedReader reader=null; StringBuilder data=new StringBuilder(); try { in=openFileInput("data");//获取输入流 reader=new BufferedReader(new InputStreamReader(in)); String line=""; while((line=reader.readLine())!=null){ data.append(line); } } catch (Exception e) { e.printStackTrace(); } finally { if(reader!=null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } return data.toString(); } }
三、SharedPreferences存储
不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的,因此使用SharedPerferences来进行数据持久化要比文件方便很多,而且SharedPreferences还支持多种不同数据类型的存储,如果存储的数据类型是整型,那么读出来的数据也是整型。
1. 将数据存储到SharedPreferences中
使用步骤:
获取SharedPreferences实例。
获取SharedPreferences.Editor对象。
调用putString(键,值)一类的方法将数据存储到SharedPreferences中。
调用apply()方法保存数据。
示例代码:
SharedPreferences preferences = getSharedPreferences("myPreferences", Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("key", "value"); editor.apply();
2. 从SharedPreferences中读取数据
示例代码:
SharedPreferences preferences = getSharedPreferences("myPreferences", Context.MODE_PRIVATE); String value = preferences.getString("key", "defaultValue");
四、SQLite数据库存储
创建数据库
使用SQLiteOpenHelper类来创建和管理数据库,使用SQL语句进行数据操作。
示例代码:
public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "myDatabase"; private static final int DATABASE_VERSION = 1; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS myTable (id INTEGER PRIMARY KEY, name TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS myTable"); onCreate(db); } }
升级数据库
当需要修改数据库结构时,可以通过onUpgrade方法来实现,在onUpgrade方法中,我们需要编写新的表结构,并删除旧的表结构,然后调用onCreate方法来重新创建新的表结构。
添加数据
使用ContentValues类来存放要添加的数据,然后通过insert方法将数据插入到表中。
示例代码:
public long addData(String name) { ContentValues values = new ContentValues(); values.put("name", name); return db.insert("myTable", null, values); }
更新数据
使用ContentValues类来存放要更新的数据,然后通过update方法来更新表中的数据。
示例代码:
public int updateData(int id, String name) { ContentValues values = new ContentValues(); values.put("name", name); return db.update("myTable", values, "id = ?", new String[]{id+"}); }
删除数据
通过delete方法来删除表中的数据。
示例代码:
public int deleteData(int id) { return db.delete("myTable", "id = ?", new String[]{id+"}); }
查询数据
通过query方法来查询表中的数据。
示例代码:
public Cursor queryData() { return db.query("myTable", null, null, null, null, null); }
五、使用LitePal操作数据库
LitePal简介
LitePal是一个Android平台上的轻量级ORM(Object Relational Mapping)框架,它可以让我们更加方便地操作数据库,LitePal提供了一些简单的API来完成CRUD(Create Read Update Delete)操作。
配置LitePal
在使用LitePal之前,我们需要在项目的build.gradle文件中添加依赖库,然后在Application中初始化LitePal。
示例代码:
LitePal.initialize(this);
创建和升级数据库
LitePal会自动为我们创建数据库和表结构,我们只需要关注业务逻辑即可,当需要修改表结构时,只需要修改对应的Java类即可,LitePal会根据新的Java类自动生成新的表结构。
使用LitePal添加数据
示例代码:
Person person = new Person(); person.setName("Tom"); person.save();
使用LitePal更新数据
示例代码:
Person person = new Person(); person.setId(1); person.setName("Jerry"); person.update(id -> true); //更新所有记录为新值
使用LitePal删除数据
示例代码:
Person person = new Person(); person.setId(1); person.delete(); //删除指定ID的记录
使用LitePal查询数据
示例代码:
List<Person> people = Person.find(QueryBuilder.where("name").eq("Tom")); //查询名字为Tom的所有记录
六、离线缓存的高速实现
离线缓存是指在有网络的状态下将从server获取的网络数据,如Json数据缓存到本地,在断网的状态下启动APP时读取本地缓存数据显示在界面上,经常使用的APP(网易新闻、知乎等等)都是支持离线缓存的,这样带来了更好的用户体验,假设能够在调用网络接口后自己主动缓存返回的Json数据,下
小伙伴们,上文介绍了“android离线存储方案”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/633618.html