同一 firebase 元素的多个模型类

2023-12-27

我正在使用一个使用 Firebase 作为数据存储库的应用程序。我只是重构整个应用程序以实现 Clean Architecture 和 RxJava。以这种方式完成所有操作,我发现管理模型对象存在问题。

这是我的问题:我有一个 Post.class,其字段和值与我可以从 Firebase 数据库参考中检索的字段和值相同:

 public Post(Author author, String full_url, String full_storage_uri, String thumb_url, String thumb_storage_uri, String text, Object timestamp) {
    this.author = author;
    this.full_url = full_url;
    this.text = text;
    this.timestamp = timestamp;
    this.thumb_storage_uri = thumb_storage_uri;
    this.thumb_url = thumb_url;
    this.full_storage_uri = full_storage_uri;
}

目前一切都很好。当我从存储库类中的观察者检索数据时,出现了我的问题:

@Override
public Observable<List<Post>> getPosts(final String groupId){
    return Observable.fromAsync(new Action1<AsyncEmitter<List<Post>>>() {
        @Override
        public void call(final AsyncEmitter<List<Post>> listAsyncEmitter) {
            final ValueEventListener PostListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                    final List<Post> postList = new ArrayList<>();
                    Log.e("Count ", "" + snapshot.getChildrenCount());
                    //For every child, create a Post object
                    for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                        Post post = postSnapshot.getValue(Post.class);
                        Log.e("new post added ", postSnapshot.getKey());
                        //Set the databaseReference to the object, which is needed later
                        post.setRef(postSnapshot.getKey());
                        postList.add(post);
                    }
                    listAsyncEmitter.onNext(postList);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.e("The read failed: ", databaseError.getMessage());
                }
            };
            //Remove listener when unsuscribe
            listAsyncEmitter.setCancellation(new AsyncEmitter.Cancellable() {
                @Override
                public void cancel() throws Exception {
                    getPostsRef().child(groupId).removeEventListener(PostListener);
                }
            });
            //Set the listener 
            getPostsRef().child(groupId).addValueEventListener(PostListener);
        }
    }, AsyncEmitter.BackpressureMode.BUFFER);
}

通过这个观察者,我已经管理了所有侦听器和数据调用,我唯一的问题是这些行:

  //Set the databaseReference to the object, which is needed later
  post.setRef(postSnapshot.getKey());

我认为将引用设置为 Post 模型中的新字段并不是一个好的做法,它应该等于我的 firebase Json Tree。所以我的问题是:创建两个不同的模型是一个好的做法吗?一种如“dbPost”和“PostEntity”。一个包含 firebase 值,另一个包含来自 dbPost 的构建器以及我想要保存的新字段(dbReference 和 valueListener)?


最后我所做的是创建两个不同的模型类。其中一个用于从 Firebase 检索和插入我的数据库参数,另一个用于我的应用程序使用应用程序需要的额外值来管理数据:

应用程序型号:

public class Post implements Parcelable{
private Author author;
private String full_url;
private String thumb_storage_uri;
private String thumb_url;
private String text;
private Object timestamp;
private String full_storage_uri;
private String ref;
private Achivement post_achivement;
private long post_puntuation;

public Post() {
    // empty default constructor, necessary for Firebase to be able to deserialize blog posts
}
[......]

Firebase 型号:

public class NetworkPost {
private Author author;
private String full_url;
private String thumb_storage_uri;
private String thumb_url;
private String text;
private Object timestamp;
private String full_storage_uri;
private Achivement post_achivement;
private long post_puntuation;

public NetworkPost() {
    // empty default constructor, necessary for Firebase to be able to deserialize blog posts
}

[...]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同一 firebase 元素的多个模型类 的相关文章

  • 按大小、日期、名称等在回收器视图中排序并记住选择

    我正在制作图库应用程序 我想为其添加排序功能 我可以使用以下命令在运行时对项目进行排序Comparator但问题是 每当我退出应用程序时 列表都会再次从数据库中出来 并且所有列表都未排序 我想在我的应用程序中提供按日期 大小 名称等排序的选
  • 启动时的 Android pin 活动

    我有一个应用程序 它将自身注册为默认启动器 并在启动时自动固定自身 安装应用程序时这一切都正常 它会自行固定 并且只有后退按钮可见 问题是 当设备首次启动时 它无法正确固定 我多次看到一系列 屏幕固定 和 屏幕取消固定 的 toast 主页
  • 如何创建适用于 iPhone、iPad 和 Android 的 Extjs 应用程序?

    有人成功创建了适用于 iPhone iPad 和 Android 的 Extjs 应用程序吗 我知道 Sencha 不支持移动设备上的 Extjs 但我不想创建另一个仅针对移动设备的网站 我不需要奇特的移动界面 只需要基本的功能 我做了一些
  • 我该怎么办:这需要 android.permission.INTERACT_ACROSS_USERS_FULL

    我正在致力于将 micode 的开源指南针集成到我正在制作的应用程序中 我想知道当我在清单中以正确的拼写清楚地说明了此权限错误时 如何修复此权限错误 我仍然需要该许可 这让我很困惑 11 03 13 53 58 241 E AndroidR
  • Android 构建签名 APK 时出错:找不到用于签名配置“externalOverride”的 keystore.jks

    当我尝试构建签名 APK 时出现此错误 我最近升级到 API 23 但之后成功生成了 APK s 我很困惑 寻求帮助并建议如何解决这个问题 这是错误 FAILURE Build failed with an exception What w
  • 如何在Android应用程序的同一屏幕上显示文本框的值,就像whatsapp一样

    这是我的主文件 我在其中调用按钮上的单击事件来传递值 protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState setConten
  • FragmentTransaction 动画滑入顶部

    我试图使用 FragmentTransaction setCustomAnimations 实现以下效果 片段A正在显示 将片段 A 替换为片段 B 片段 A 在替换过程中应保持可见 片段 B 应从右侧滑入 片段 B 应滑入片段 A 的顶部
  • 无法从后台服务通过 WiFi 访问互联网

    我将直接介绍我发现的一些事实 数据 如果您遇到 解决了类似的问题 请帮助我 我每 5 分钟向服务器发送一次数据 除非用户在服务器的帮助下手动将其关闭 wakeful broadcast receiver通过一个intent service
  • 如何消除警告:使用“$”而不是“.”对于 Eclipse 中的内部类

    我是 Android 开发新手 当我将 eclipse 和 Android SDK 更新到最新版本后 我收到警告 Use instead of for inner classes or use only lowercase letters
  • 发送 OneSignal 推送通知时 Android 应用程序崩溃

    Android 应用程序在发送信号推送通知后立即崩溃 我收到这个错误 尝试查看其他 stackoverflow 答案 但没有帮助 请检查下面的代码 build gradle 和错误 不明白为什么它不起作用 P 请检查下面的代码 build
  • 编辑模板身份验证 Firebase

    您好 我使用 Firebase 启动了一个新应用程序 然后执行身份验证方法 但我需要编辑电子邮件地址验证和更改电子邮件地址的模板 这两个选项无法编辑 但重置密码后可以编辑模板 字段 消息 该消息仅在选项 电子邮件地址验证和更改电子邮件地址
  • android 从图库中选择图像

    我想从图库创建一个图片选择器 我使用代码 intent new Intent Intent ACTION PICK android provider MediaStore Images Media EXTERNAL CONTENT URI
  • 如何在将数据发送到 Firebase 数据库之前对其进行加密?

    我正在使用 Firebase 实时数据库制作聊天应用程序 我知道 Firebase 非常安全 只要您的规则正确 但我自己可以阅读使用我的应用程序的人的所有聊天记录 我想阻止这种情况 为此我需要一种解密和加密方法 我尝试使用凯撒解密 但失败了
  • 使用 IntelliJ / Android Studio 调试基于 gradle 的单元测试

    我正在使用robolectric gradle 插件 https github com robolectric robolectric gradle plugin为 Android 编写单元测试 到目前为止 除了能够使用 Android S
  • 为什么在回收器视图中滚动后值会消失?

    Data before scrolling Data after scrolling 我的应用程序的问题如上图所示 输入数据后 如果我在将项目添加为可滚动后滚动 数据就会消失 作为进一步的解释 有时输入的数据出现在已添加的其他项目中 为了解
  • DeadSystemException启动服务Android 7

    在过去的几周里 我在我的事故报告中看到 Fatal Exception java lang RuntimeException Unable to start service com MyService ef705d8 with Intent
  • Android 中的字符串加密

    我正在使用代码进行加密和加密 它没有给出字符串结果 字节数组未转换为字符串 我几乎尝试了所有方法将字节数组转换为字符 但没有给出结果 public class EncryptionTest extends Activity EditText
  • ActionBar 中的进度条

    我正在使用一个应用程序 它将在应用程序内部加载一个网站 现在我想在操作栏中添加一个进度栏 而无需向上滑动来抑制功能 像那样 我在用Fragment在我的应用程序中 WebviewFragment public class WebviewFr
  • Phonegap - cordova 在 Android 和 iOS 设备上延迟且缓慢

    我刚刚开始使用 zend studio 开始我的第一个 PhoneGap 项目 但是 在我构建并部署它之后 该应用程序非常慢 Android 和 iOS 均可 滚动滞后 如果我按下按钮 转到下一页的速度很慢 有什么办法可以提高它的性能吗 提
  • 使用 Android 的 Mobile Vision API 扫描二维码

    我跟着这个tutorial http code tutsplus com tutorials reading qr codes using the mobile vision api cms 24680关于如何构建可以扫描二维码的 Andr

随机推荐