public Date getDate() {
return this.date;
}

public void setDate(Date date) {
this.date = date;
}

}

​ 在 Activity 执行查询(多余的业务代码已经被我省略):

public class NoteActivity extends Activity {

private Box notesBox;
private Query notesQuery;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

BoxStore boxStore = ((App) getApplication()).getBoxStore();
notesBox = boxStore.boxFor(Note.class);

// query all notes, sorted a-z by their text
(http://greenrobot.org/objectbox/documentation/queries/)
notesQuery = notesBox.query().order(Note_.text).build();
updateNotes();
}

/** Manual trigger to re-query and update the UI. For a reactive alternative check {@link ReactiveNoteActivity}. */
private void updateNotes() {
List notes = notesQuery.find();
}

private void addNote() {
Note note = new Note();
note.setText(noteText);
note.setComment(comment);
note.setDate(new Date());
notesBox.put(note);
Log.d(App.TAG, "Inserted new note, ID: " + note.getId());
}

}

ObjectBox 的 Reactive 用法

​ 同样在 Activity 中执行查询:

/** An alternative to {@link NoteActivity} using a reactive query (without RxJava, just plain ObjectBox API). */
public class ReactiveNoteActivity extends Activity {

private Box notesBox;
private Query notesQuery;
private DataSubscriptionList subscriptions = new DataSubscriptionList();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

notesBox = ((App) getApplication()).getBoxStore().boxFor(Note.class);

// query all notes, sorted a-z by their text
// (http://greenrobot.org/objectbox/documentation/queries/)
notesQuery = notesBox.query().order(Note_.text).build();

// Reactive query (http://greenrobot.org/objectbox/documentation/data-observers- reactive-extensions/)
notesQuery.subscribe()
.onError(new ErrorObserver() {
@Override
public void onError(Throwable th) {

}
})
// 官方推荐的做法是对 data observers 持有弱引用,防止忘记 cancel subscriptions,
// 但是最好还是记得及时 cancel subscriptions(例如在 onPause、onStop 或者
// onDestroy 方法中)
.weak()
.on(AndroidScheduler.mainThread())
.observer(new DataObserver<List>() {
@Override
public void onData(List notes) {
// 只要数据库里的数据发生了变化,这里的方法就会被回调执行,相当智能。。。
// 业务代码
}
});
}

@Override
protected void onDestroy() {
subscriptions.cancel();
super.onDestroy();
}

private void addNote() {
Note note = new Note();
note.setText(noteText);
note.setComment(comment);
note.setDate(new Date());
notesBox.put(note);
Log.d(App.TAG, "Inserted new note, ID: " + note.getId());
}
}

上面的用法看上去就像傻瓜版的 RxJava,上手容易,概念理解也简单,但是并没有 RxJava那么强大的功能,所以如果在应对更复杂的业务逻辑的时候,还是需要引入 RxJava ,示例如下:

Query query = box.query().build();
RxQuery.observable(query).subscribe(this);

RxQuery 可以使用 Flowable、Observable、Single 来订阅查询结果,目前 ObjectBox 只支持 RxJava 2 。

调试

​ 添加权限

​ 在 Application 开启调试

boxStore = MyObjectBox.builder().androidContext(App.this).build();
if (BuildConfig.DEBUG) {
boolean started = new AndroidObjectBrowser(boxStore).start(this);
Log.i(“ObjectBrowser”, "Started: " + started);
}

​ 执行命令

adb forward tcp:8090 tcp:8090

​ 在电脑浏览器中访问

http://localhost:8090/index.html

学习分享

①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包——————可以点击我的【Github】免费下载,最后觉得有帮助、有需要的朋友可以点个赞

有帮助、有需要的朋友可以点个赞

[外链图片转存中…(img-8ntl00XH-1643960181162)]

[外链图片转存中…(img-EElkQLQr-1643960181164)]

[外链图片转存中…(img-vaxtz4nw-1643960181165)]

ObjectBox 集成指南,2021年大厂Android岗面试必问相关推荐

  1. hook(2)Activity启动流程,2021年大厂Android岗面试必问

    } 效果:跳转依然正常,并且logcat中可以发现下面的日志. #####ok,插入自己的逻辑,成功 ##三. 第二种启动方式的hook方案 创建ApplicationContextHookHelpe ...

  2. 2021年京东Android岗面试必问,高级面试题+解析

    面试经历 网易游戏实习生招聘很神奇的是整个就一轮面试,HR面是不存在的.面试是视频面试,用的牛客网平台,大概面了一个小时多一点.面试主要就是把计算机四大专业课轮番问了一遍,问了Java语言基础,最后还 ...

  3. 实现原理讲解!2021年京东Java岗面试必问

    前言 为什么要读Spring源码,有的人为了学习Spring中的先进思想,也有的人是为了更好的理解设计模式,当然也有很大一部分小伙伴是为了应付面试,Spring Bean的生命周期啦,Spring A ...

  4. Android岗面试必问!斗鱼直播Android开发二面被刷,深度好文

    开头 在我认为,对于Android面试以及进阶的最佳学习方法莫过于刷题+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题 ...

  5. Java软件开发面试题!2021年京东Java岗面试必问

    前言 面试技巧另外开篇再说,先上面试干货吧.面试的题目并不一定有严格的顺序关系,有的是从前一个问题延伸而来,(探究的是一个知识的深度),有的是考察面试者的知识广度.有的纯粹是我想到哪里写到哪里的啦.. ...

  6. 2023测试岗面试必问13题(你是在等通知还是拿offer呢?)

    面试题1:请先简单做一下自我介绍? 等通知的回答: 你好,面试官,我叫xx,我来自长沙,大学在上海就读,现在在xx公司从事测试2年,做过很多项目,性格开朗.. 拿offer的回答: 你好,我叫XX,2 ...

  7. 超硬核!腾讯运维岗面试必问11题,我说的,不信就来看看

    不要怕大公司面试,找到核心的高频问题,就解决了80%的面试题 请你谈谈进程和线程的区别? 1)进程 进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有 ...

  8. 高级Android研发面试必问:Android屏幕适配全方位解析

    前言 前面我们已经将android的绘制基础已经讲完,那么现在我们下面的两个内容点是事件分发问题,和屏幕适配相关.这篇我们主要来进android但中的各种屏幕适配问题 1.屏幕适配概念 而随着支持An ...

  9. Java岗面试必问!mysql视频教程百度云

    阻塞IO 我们知道在调用某个函数的时候无非就是两种情况,要么马上返回,然后根据返回值进行接下来的业务处理.当在使用阻塞IO的时候,应用程序会被无情的挂起,等待内核完成操作,因为此时的内核可能将CPU时 ...

最新文章

  1. java怎么创建子程序_JVM执行子程序
  2. Python 之 Pandas (八)图像
  3. Hibernate 事务总结
  4. 解决idea中连接MySQL数据库后写SQL语句没有提示
  5. OpenCV cv::Mat::checkVector用法的实例(附完整代码)
  6. GaussDB分布式Stream执行计划详解
  7. 那些年做过的 .NET Web 项目和 iOS 之路的一些思考
  8. Linux安装nginx详细步骤
  9. react-native环境配置——Android工程搭建
  10. linux内核源码分析系列文章汇总
  11. 2021爱分析·药企数字化趋势报告
  12. 设计模式-Builder模式详解
  13. linux生成密钥公钥,linux 生成密钥和公钥,实现免密登录
  14. 艾艾贴redis集群
  15. 大厂Java面试过程中如何介绍自己的项目经历?
  16. [POJ2352] Stars 夜空星辰 - 树状数组
  17. 俞敏洪:梦想需要行动(转)
  18. ib课程北京国际学校哪里有?
  19. 前端H5开发的基础知识点
  20. STM32 串口 FIFO

热门文章

  1. 在线文档编辑工具比较
  2. 单片机 模拟电子闹钟 c语言,分享一个LCD1602电子闹钟 双闹版 带单片机源程序
  3. Linux 开机运行sh 脚本 三种方法
  4. docker、docker-compose 下安装kibana
  5. “钱三篇”后续之年金终值
  6. 两个∑符号,两个∏符号运算公式
  7. 实验5:进程管理【nyist】
  8. 时间片轮转进程调度算法(实习报告)
  9. 架构师修炼系列【存储高性能[NoSQL]】
  10. 用函数指针来实现状态机