Java 如何使用firebase数据库更新本地对象

Java 如何使用firebase数据库更新本地对象,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,一般来说,我对android和java都是新手 我正在尝试创建一个android应用程序,其中的对象存储在firebase实时数据库中。根据需要,我使用addListnerForSingleValueEvent从数据库中获取对象 mDatabase.child(itemType).child(id).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onD

一般来说,我对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();
        }
    });
这里callback是我自己的callback类的一个对象

我试图了解如何随时更新实体

是否有一种方法可以保留对我创建的实体对象的引用,并在使用addValueEventListner在数据库中更新对象时对其进行更新,以便在整个应用程序中反映它?据我所知,在recycler视图中,数据会自动更新。我的问题不是针对回收商的观点

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

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

编辑1:

基于评论,添加了最低限度的数据库结构。还有更多像“消息”这样的复杂结构(包含列表等)

编辑2:


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

使用

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());
        // ...
    }
});
使用

而不是

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());
        // ...
    }
});

您能展示一下数据库结构吗?在“编辑1”中添加了为测试而创建的部分数据库的数据库结构。谢谢你的帮助。检查网络PCKG“如何使本地对象保持最新以及如何为客户机中的每个数据库对象强制执行单个本地对象”是什么意思?请用@回复。能否显示数据库结构?在“编辑1”中添加了为测试而创建的部分数据库的数据库结构。谢谢你的帮助。检查网络PCKG“如何使本地对象保持最新以及如何为客户机中的每个数据库对象强制执行单个本地对象”是什么意思?请用@回复。我知道addValueEventListener将为每次更新触发onDataChange方法。问题是如何保持本地对象的更新,以便在使用对象的客户机中的任何地方都有更新的值。对于“Livedate”或使用“Observer”的两个选项,我了解addValueEventListener将为每次更新触发onDataChange方法。问题是如何保持本地对象的更新,以便在使用对象的客户机中的任何地方都有更新的值