欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

ObjectBox:支持LiveData(Android体系结构组件)

程序员文章站 2022-05-31 09:26:20
objectbox:支持livedata(android体系结构)。 objectbox 1.2.0以后开始支持livedata。 作为objectbox的观察者和rx的备...

objectbox:支持livedata(android体系结构)。


objectbox 1.2.0以后开始支持livedata。

作为objectbox的观察者和rx的备选方案,您可以选择由android architecture components提供的livedata方法。objectbox附带了 objectboxlivedata,这是一个在viewmodel类中使用的类。
在我们的demo中我们实现了一个简单的viewmodel:
public class noteviewmodel extends viewmodel {

public class noteviewmodel extends viewmodel {

    private objectboxlivedata notelivedata;

    public objectboxlivedata getnotelivedata(box notesbox) {
        if (notelivedata == null) {
            // query all notes, sorted a-z by their text
            notelivedata = new objectboxlivedata<(notesbox.query().order(note_.text).build());
        }
        return notelivedata;
    }
}

我们通过传参的方式获取notesbox,当然你在anroid中也可以使用((app) getapplication()).getboxstore().boxfor()。
不过,第一种方法的好处是我们的viewmodel没有引用android类。这使得单元测试更容易。

现在,在创建activity或fragment 时,我们得到viewmodel,访问它的livedata并最终注册以观察更改:

noteviewmodel model = viewmodelproviders.of(this).get(noteviewmodel.class);
model.getnotelivedata(notesbox).observe(this, new observer>() {
    @override
    public void onchanged(@nullable list notes) {
        notesadapter.setnotes(notes);
    }
});

观察者一旦订阅,objectboxlivedata就会开始查询,并在查询结果发生变化时通知观察者。在此示例中,如果添加或删除注释,则会通知acticity。如果所有观察者被销毁,livedata将取消对查询的订阅。

如果你以前使用过objectbox observers,这听起来很熟悉。objectboxlivedata只是对dataobserver进行了一层封装而已。