Android使用Realm数据库如何实现App中的收藏功能
发布时间:2021-05-07 11:20:34
来源:亿速云
阅读:63
作者:小新
这篇文章主要介绍了Android使用Realm数据库如何实现App中的收藏功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式:使用SharedPreferences存储数据;
文件存储数据;
SQLite数据库存储数据;
使用ContentProvider存储数据;
网络存储数据。
其中前四种都是缓存数据到本地,这篇主要讲的是使用第三种方式来实现App中的收藏功能,不过不用Android原生自带SQLite数据库来存储数据,而是使用第三方的Realm数据库来来存储数据。
Realm 本质上是一个嵌入式数据库,他并不是基于SQLite所构建的。它拥有自己的数据库存储引擎,可以高效且快速地完成数据库的构建操作。和SQLite不同的是,它允许你在持久层直接和数据对象工作。在它之上是一个函数式风格的查询api,众多的努力让它比传统的SQLite 操作更快 。
Realm不仅支持Android的接入,还支持IOS的接入。那么接下来就使用Realm数据库实现Android App中的收藏功能吧。
需求分析
要使用Realm数据库实现App中的收藏功能,需要实现以下几个功能和步骤:在Android项目接入Realm数据库;
创建收藏数据库表;
实现对收藏数据库表进行增删查的操作;
数据库表增删查时界面实时渲染和更新。
接入Realm数据库
然后在AS的外层build.gradle里的buildscript.dependencies添加Realm数据库相关的依赖buildscript {
dependencies {
...
classpath "io.realm:realm-gradle-plugin:6.0.1"
}
}
然后在AS的内层build.gradle里添加Realm数据库相关的依赖
在顶部 apply plugin: ‘com.android.application' 下添加 apply plugin: ‘realm-android' 的声明,如下图
在定义的Application里初始化数据库相关的配置(包括数据库名称和版本号,具体代码看Demo源码)/**
* 数据库相关的配置
*
* @param context
*/
private void initRealm(Context context) {
try {
Realm.init(context);
RealmConfiguration config = new RealmConfiguration.Builder()
.name(RealmConstant.REALM_DB_NAME)
.schemaVersion(RealmConstant.REALM_DB_VERSION)
.build();
Realm.setDefaultConfiguration(config);
} catch (Exception e) {
e.printStackTrace();
}
}
创建收藏数据库表
首先先创建一张收藏数据库表,代码如下:/**
* 电影收藏数据库表名
*/
public class MovieCollectDBModel extends RealmObject {
// 影视id,主键
@Required
@PrimaryKey
@Index
private String movieId;
// 影视名称
@Required
private String movieName;
// 影视海报、封面
@Required
private String poster;
// 影视标签
@Required
private String movieLabel;
// 影视类型
@Required
private String videoType;
// 添加到数据的时间
@Required
private String createdTime;
// 以下省略字段的 set 和 get
}
该类继承于Realm的RealmObject类,其中字段movieId作为该表的主键,也是数据在表里的唯一性。
收藏数据库表的增删查
添加影视数据到到数据库的操作(增)/**
* 添加收藏数据到本地数据库
*
* @param mvId
* @param mvName
* @param movieImg
* @param movieLabel
* @param videoType
*/
public void addCollectToDB(String mvId, String mvName, String movieImg, String movieLabel, String videoType) {
MovieCollectDBModel movieCollectDBModel = new MovieCollectDBModel();
movieCollectDBModel.setMovieId(mvId);
movieCollectDBModel.setMovieName(mvName);
movieCollectDBModel.setPoster(movieImg);
movieCollectDBModel.setMovieLabel(movieLabel);
movieCollectDBModel.setVideoType(videoType);
movieCollectDBModel.setCreatedTime(BaseUtil.getNowDateTimeFormat());
mTransaction = mRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(movieCollectDBModel);
}
}, new Realm.Transaction.OnSuccess() {
@Override
<