Android Room框架使用
目录
Room 的使用三角色介绍:
使用步骤:
使用准备:
使用:
Room 的使用三角色介绍:
- @Entity(数据库表 与 类相似);
- @Dao (操作引擎,用于操作数据库)
- @Database(创建数据库)
使用步骤:
使用准备:
- 导入依赖:(在 bulid.gradle 文件)中导入,(导入的本处版本只是举例,可在官网出查找其他版本)
dependencies {def room_version = "2.4.2"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version" }
- 结合Rxjava使用额外添加相关依赖:
dependencies {...// optional - RxJava2 support for Roomimplementation "androidx.room:room-rxjava2:$room_version"// optional - RxJava3 support for Roomimplementation "androidx.room:room-rxjava3:$room_version"// optional - Guava support for Room, including Optional and ListenableFutureimplementation "androidx.room:room-guava:$room_version"// optional - Test helperstestImplementation "androidx.room:room-testing:$room_version"// optional - Paging 3 Integrationimplementation "androidx.room:room-paging:2.5.0-alpha01" }
使用:
- @Entity 创建 数据库表(与 类对象相似):
package com.example.androidapp.SQlist;import androidx.room.Entity; import androidx.room.PrimaryKey;@Entity(tableName = "Agency") public class Agency implements Serializable {@PrimaryKey(autoGenerate = true)private int id;private String agency_name;private String agency_nowTime;private String agency_futureTime;private String agency_okTime;private String agency_type;private String agency_nowstate;private String agency_context;public Agency(String agency_name, String agency_nowTime, String agency_futureTime,String agency_type, String agency_nowstate, String agency_context) {this.agency_name = agency_name;this.agency_nowTime = agency_nowTime;this.agency_futureTime = agency_futureTime;this.agency_type = agency_type;this.agency_nowstate = agency_nowstate;this.agency_context = agency_context;} public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAgency_name() {return agency_name;}public void setAgency_name(String agency_name) {this.agency_name = agency_name;}public String getAgency_nowTime() {return agency_nowTime;}public void setAgency_nowTime(String agency_nowTime) {this.agency_nowTime = agency_nowTime;}public String getAgency_futureTime() {return agency_futureTime;}public void setAgency_futureTime(String agency_futureTime) {this.agency_futureTime = agency_futureTime;}public String getAgency_type() {return agency_type;}public void setAgency_type(String agency_type) {this.agency_type = agency_type;}public String getAgency_nowstate() {return agency_nowstate;}public void setAgency_nowstate(String agency_nowstate) {this.agency_nowstate = agency_nowstate;}public String getAgency_context() {return agency_context;}public void setAgency_context(String agency_context) {this.agency_context = agency_context;}public String getAgency_okTime() {return agency_okTime;}public void setAgency_okTime(String agency_okTime) {this.agency_okTime = agency_okTime;}@Overridepublic String toString() {return "Agency{" +"id=" + id +", agency_name='" + agency_name + '\'' +", agency_nowTime='" + agency_nowTime + '\'' +", agency_futureTime='" + agency_futureTime + '\'' +", agency_type='" + agency_type + '\'' +", agency_nowstate='" + agency_nowstate + '\'' +", agency_context='" + agency_context + '\'' +'}';} }
- @Dao 操作数据库
package com.example.androidapp.SQlist;import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import androidx.room.Update;import java.util.List; @Dao public interface AgencyDao {@Insertvoid insertAgencies(Agency... agencies);@Updatevoid updateAgencies(Agency... agencies);@Deletevoid deleteAgencies(Agency... agencies);@Query("SELECT * FROM Agency ORDER BY ID DESC")List<Agency> getAllAgency(); }
- @Database 创建 数据库 并与 数据表 关联:暴露Dao给用户操作数据库
package com.example.androidapp.SQlist;import android.content.Context;import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase;//数据库 关联 之前的表 数据库信息 //,User.class @Database(entities = {Agency.class},version = 1,exportSchema = false) public abstract class AgencyDatabase extends RoomDatabase {// 暴露 dao 给用户操作 数据库public abstract AgencyDao getAgencyDao();// 单例模式 返回 dbprivate static AgencyDatabase INSTANCE;static synchronized AgencyDatabase getInstance(Context context){if (INSTANCE == null){INSTANCE = Room.databaseBuilder(context.getApplicationContext(),AgencyDatabase.class,"Agency_database").build();}return INSTANCE;} }
- 创建 一个 DBclass 用于实现 在异步操作 中进行数据操作(这里我用了AsyncTask进行异步操作)
package com.example.androidapp.SQlist;import android.content.Context; import android.os.AsyncTask;import java.util.ArrayList; import java.util.List;public class DBEngine {// 接收 传入的 AgencyDao 对象private AgencyDao agencyDao;// 接收 传入的 UserDao 对象private UserDao userDao;// 接收 获取的所有数据 实现单例private static List<Agency> allAgencies = new ArrayList<>();private static List<User> allUsers = new ArrayList<>();// 实现 构造方法public DBEngine(Context context) {AgencyDatabase agencyDatabase = AgencyDatabase.getInstance(context);agencyDao = agencyDatabase.getAgencyDao();UserDatabase userDatabase = UserDatabase.getInstance(context);userDao = userDatabase.getUserDao();};//*********************************************************************************************// 插入 操作public void insertAgencies(Agency... agencies) { // 开启 InsertAsyncTask 线程new InsertAsyncTask(agencyDao).execute(agencies);}// 更新 操作public void updateAgencies(Agency... agencies) {new UpdateAsyncTask(agencyDao).execute(agencies);}// 删除 操作public void deleteAgencies(Agency... agencies) {new DeleteAsyncTask(agencyDao).execute(agencies);}// 获取 操作public void getAllAgencies(Agency... agencies) {new GetAllAgencies(agencyDao).execute();} //********************************************************************************************* //Agency// 实现 插入功能private static class InsertAsyncTask extends AsyncTask<Agency, Void, Void> {// 获取 AgencyDao 对象private AgencyDao dao;// 实现 构造方法public InsertAsyncTask(AgencyDao agencyDao) {dao = agencyDao;}// 实现 AgencyDao 操作@Overrideprotected Void doInBackground(Agency... agencies) {dao.insertAgencies(agencies);return null;}}// 实现 更新功能private static class UpdateAsyncTask extends AsyncTask<Agency, Void, Void> {private AgencyDao dao;public UpdateAsyncTask(AgencyDao agencyDao) {dao = agencyDao;}@Overrideprotected Void doInBackground(Agency... agencies) {dao.updateAgencies(agencies);return null;}}// 实现 删除功能private static class DeleteAsyncTask extends AsyncTask<Agency, Void, Void> {private AgencyDao dao;public DeleteAsyncTask(AgencyDao agencyDao) {dao = agencyDao;}@Overrideprotected Void doInBackground(Agency... agencies) {dao.deleteAgencies(agencies);return null;}}// 实现 获取所有数据 功能private static class GetAllAgencies extends AsyncTask<Void, Void, List<Agency>> {private AgencyDao dao;public GetAllAgencies(AgencyDao agencyDao) {dao = agencyDao;}// 获取数据@Overrideprotected List<Agency> doInBackground(Void... voids) {allAgencies = dao.getAllAgency();return allAgencies;}// 返回 数据@Overrideprotected void onPostExecute(List<Agency> agencies) {super.onPostExecute(agencies);allAgencies = agencies;}}
- 在主类 中 实例化 一个DB 对象,都数据进行操作
// 获取 数据库引擎private DBEngine dbEngine;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbEngine = new DBEngine(this);dbEngine.getAllAgencies();// 实例化 一个 Agency 对象Agency new_agency = new Agency(name, nowTimeStr, futureTimeStr, typeStr, stateStr, contextStr);// 插入 操作dbEngine.insertAgencies(new_agency );// 更新 操作dbEngine.updateAgencies(new_agency );// 删除 操作dbEngine.deleteAgencies(new_agency );// 获取 操作dbEngine.getAllAgencies(new_agency );}
项目案例:
苏苏待办:
github: GitHub - susihao/Agency: 苏苏待办
Android Room框架使用相关推荐
- Android View框架的measure机制
Android中View框架的工作机制中,主要有三个过程: 1.View树的测量(measure)Android View框架的measure机制 http://www.cnblogs.com/xyh ...
- 5个最佳的Android测试框架
2019独角兽企业重金招聘Python工程师标准>>> 谷歌的Android生态系统正在不断地迅速扩张.有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸.ROM / ...
- 开发自己的山寨Android注解框架
目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...
- android layout后还原位置,Android图片框架photoview如何记住所有状态并还原,包括缩放度,缩放后的移动的距离等等...
Android图片框架photoview如何记住状态并还原,包括缩放度,缩放后的移动的距离等等,尝试了好多方法都没有作用. private void generateImages() { for (i ...
- Android 数据库框架ormlite 使用精要
Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...
- Android 插件框架机制之Small
Android 插件框架机制系列文章: Android 插件框架机制之预热篇 Android 插件框架机制之DroidPlugin 引言 上一篇文章提到过Small,这次就简单说一下Small,这只是 ...
- Android开源框架——图表MPAndroidChart
开源官网:https://github.com/PhilJay/MPAndroidChart Android开源框架--图表MPAndroidChart 特点 配置 图表类型 Demo MPAndro ...
- Android——开源框架Universal-Image-Loader + Fragment使用+轮播广告
原文地址: Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二) ...
- Android开源框架源码鉴赏:Fresco
文章目录 一 图片加载流程 1.1 初始化Fresco 1.2 获取DataSource 1.3 绑定DraweeController与DraweeHierarchy 1.4 从内存缓存/磁盘缓存/网 ...
- Android开源框架源码鉴赏:Okhttp
文章目录 一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterce ...
最新文章
- python【蓝桥杯vip练习题库】BASIC-21Sine之舞(递归 递推)
- 安装阴阳师出现错误“选择的驱动器或UNC共享不存在或不能访问“怎么解决?
- 半轴CVJ(constant velocity joint)
- display:inline-block的深入理解(转)
- 问题 1073: 弟弟的作业
- Android--Handler使用应运及消息机制处理原理分析
- 两个服务器之间怎么传输大量数据速度快 java socket_千兆网络的传输速度能超过125MB/s么?...
- NIPS 又!放!票!了!
- 表格如何excel在线转letex
- No module named ‘gym‘
- 华中科技大学计算机二级成绩,华中科技大学2017年计算机水平测试(软考)报名通知...
- 乒乓球基本站姿站位和步伐
- 如何从GitHub上面下载Java项目,并用IDEA导入该项目跑起来?
- 吴恩达 tensorflow
- 工作十年之感悟 -- 兼谈生活与人生
- 计算机提示无法验证发布者,win7系统取消“无法验证发布者”提示框的操作技巧...
- 提高抗打击能力_如何提高心理承受能力或者抗打击能力?
- Repeater用法(
- Unable to make field private final byte[] java.lang.String.value accessible: module java.base does n
- 笙默考试管理系统——学员