【问题标题】:How to keep local object updated with firebase database如何使用 Firebase 数据库更新本地对象
【发布时间】:2019-09-14 10:31:54
【问题描述】:

总的来说,我是 android 和 java 的新手。

我正在尝试创建一个 android 应用程序,其中我将对象存储在 firebase 实时数据库中。根据需要,我使用 addListnerForSingleValueEvent 从数据库中获取对象。

mDatabase.child(itemType).child(id).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            T entity = dataSnapshot.getValue(typeParameterClass);
            callback.onSuccess(entity);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            callback.onFailure();
        }
    });

这里的回调是我自己的回调类的一个对象。

我正在尝试了解如何始终保持实体更新。

有没有一种方法可以保留对我创建的实体对象的引用,并在使用 addValueEventListner 在数据库中更新对象时更新它,以便它反映在整个应用程序中?我了解回收站视图中的数据会自动更新。我的问题不是针对回收者视图的情况。

如果有这样的方法,那么我将如何处理不同的代码为同一个数据库对象创建不同的客户端对象的情况?有没有办法在客户端中对每个数据库对象强制执行单个对象?

我希望我的问题不是含糊的。

编辑 1:

基于Comment,添加简约的数据库结构。还有更多复杂的结构,例如“消息”(包含列表等)。

编辑 2:

我了解 addValueEventListner 将为数据库中的每次更新触发 onDataChange 方法。我的问题是如何使本地对象保持最新以及如何为客户端中的每个数据库对象强制执行单个本地对象。请阅读原始问题以获取更多详细信息。

【问题讨论】:

  • 你能告诉你数据库结构吗?
  • 添加了在“EDIT 1”中为测试创建的部分数据库的数据库结构。感谢您的帮助。
  • “如何使本地对象保持最新以及如何为客户端中的每个数据库对象强制执行单个本地对象”是什么意思?请回复@。

标签: java android firebase firebase-realtime-database


【解决方案1】:

使用

addValueEventListener

而不是

addListenerForSingleValueEvent

例子:

// My top posts by number of stars
mDatabase.child(itemType).child(id).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
            // TODO: handle the post
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
        // ...
    }
});

【讨论】:

  • 我了解 addValueEventListener 每次更新都会触发 onDataChange 方法。问题是如何保持本地对象的更新,以便在客户端的任何地方,使用对象的地方,它都有更新的值。
  • “Livedate”或使用“Observer”的两个选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2011-10-17
  • 2018-06-11
  • 1970-01-01
相关资源
最近更新 更多