Articles of firebase database

在Firebase侦听器中设置Singleton属性值

我目前正在测试Firebase以及我计划在整个应用程序生命周期中使用的Singleton模型。 我现在陷入了一些似乎非常微不足道的事情,但我无法理解我的生活。 我有一个我使用的模型样本:firebase中的书签。 public class BookSingleton { private static BookSingleton model; private ArrayList bookmarks = new ArrayList(); public static BookSingleton getModel() { if (model == null) { throw new IllegalStateException(“The model has not been initialised yet.”); } return model; } public ArrayList theBookmarkList() { return this.bookmarks; } public void setBookmarks(ArrayList bookmarks){ this.bookmarks = bookmarks; } […]

适用于Android的Firebase,如何循环播放子节点(对于每个子节点= x do y)

这是我的测试看起来像: 我不会使用上面的字段,它只是一个假人。 但我想通过“用户”上的所有孩子,并为每个电子邮件返回一个: System.out.println(emailString); 我find列出对象的唯一方法是使用firebaseAdapter,还有另一种方法吗?

后台服务的Firebase数据库更新

在Android应用程序中使用从后台服务更新Firebase数据库时,我发现了一种非常奇怪的行为。 仅供参考我将SetPersistanceEnabled设置为TRUE。 我的Java API版本是2.5.0+。 以下是发生的事情: 我有一个以STICKY开始的后台服务。 此服务接收GCM,收到这些消息后,我会对Firebase数据库进行一些更新。 当应用程序在前台运行时,更新工作完全正常但是一旦应用程序被终止,更新就不会在线反映回DB。 我可以确认当应用程序被杀死时服务重新启动,并且当GCM到达时Firebase UpdateChildren的CompletionListener被调用而没有错误,这意味着数据已被持久化(我可以根据在控制台上打印的日志语句来确认这一点)。 但后来为什么我没有在网上看到更新。 我认为因为持久性已启用它可能会在应用程序再次联机时将其同步回来但在重新启动应用程序并在前台运行后没有,我仍然没有看到更新同步到数据库。 有没有人遇到过类似的问题。 如果我做错了,请告诉我。 顺便说一下,我没有在应用程序的任何地方使用goOnline或goOffline。

Firebase Android:onDataChange()事件总是在主UI线程中执行?

在使用Firebase的Android应用程序中,一旦Firebase返回查询答案,我需要在后台执行长时间操作。 例如: query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot data) { dosomething very long. . . then call a callback forUI thread } 我知道onDataChange()在异步模式下执行查询,但onDataChange()方法似乎总是在主UI线程中执行,即使我尝试在自定义后台线程中调用查询。 有谁知道如何管理这个用例?

Android firebase 9.0.0 setValue用于序列化枚举

我有这个课程使用枚举。 解析Firebase json曾经工作得很好 – 使用jackson。 迁移到firebase-database时:9.0.0我得到以下内容: com.google.firebase.database.DatabaseException:没有在类上find的序列化属性…. MyClass $ Kind 其中Kind是枚举声明的types。 class上: public class MyClass { public enum Kind {W,V,U}; private Double value; private Kind kind; /* Dummy Constructor */ public MyClass() {} public Double getValue() { return value; } public void setValue(Double value) { this.value = value; } public Kind getKind() { return kind; […]

在Firebase中启用持久性时实际发生了什么?

在iOS中打开Firebase的持久性时,我的观察者实际发生了什么以及他们在技术层面上的表现如何? 基于此https://www.firebase.com/docs/ios/guide/offline-capabilities.html,我很清楚它应该如何在高级别上运行 – Firebase本质上保留了数据的缓存副本离线访问。 我不明白的是我的观察者应该开多少次以及有什么信息。 firebase是否始终首先使用任何缓存数据触发我的观察者(如果没有任何数据则为null),然后是服务器数据。 或者它是否仅发送缓存数据(如果存在,后跟服务器数据)。 在持久模式下,observerSingleValue和连续观察者的行为之间有什么区别吗? 在启用了持久性的应用中,我注意到: Firebase只是发送服务器数据 Firebase发送缓存的数据(如果存在),然后发送服务器数据。 Firebase发送缓存数据,如果不存在则返回null,后跟服务器数据。 清除它很好,所以我们知道哪个应该是正常行为:)

具有空视图的FirebaseRecyclerAdapter

我知道有很多方法可以为RecyclerView提供空视图。 但我的问题是FirebaseRecyclerView。 我的布局是: 所以我在RecyclerView填充其项目之前显示正在加载ProgressBar。 现在如果服务器没有任何项目怎么办? 在这种情况下,我的RecyclerView始终为空,我的Loading ProgressBar始终对用户可见。 因此,我想要显示一些空的布局,而不是无限期地显示ProgressBar。 例如“找不到数据”或类似的消息。 最终结果应该是:ProgressBar应该显示,直到数据加载到RecyclerView,一旦数据加载,ProgressBar应该是不可见的。 但是如果服务器中没有数据,则应显示一些空布局而不是ProgressBar。 在普通的RecyclerView中,我们有一个数据集(某些ArrayList等),如果它是空的,那么我们可以显示那个空布局。 但是对于FirebaseRecyclerAdapter,我在我的Activity或Context中没有Snapshot的引用。 我也没有任何回调告诉我服务器中没有数据。 任何解决方法都会有很大帮助。

如何使用Firebase服务器时间戳生成日期?

目前,Google的ServerValue.TIMESTAMP版本返回{“.sv”:”timestamp”} ,用作Firebase的指令,以便在将数据保存到Firebase服务器后使用服务器时间戳填充该字段。 但是,当您在客户端创建数据时,您还没有实际的时间戳(即用作创建日期)。 在初始保存和随后的检索之后,您只能访问时间戳,我想 – 有时候太晚了,不太优雅。 在Google之前: 更新:忽略此部分,因为它不正确 – 我误解了这些例子。 ServerValue.TIMESTAMP始终返回{“.sv”:”timestamp”} 。 据我所知,在go-google Firebase中,似乎有一个服务器生成的时间戳可用于获取实际时间戳: import com.firebase.client.ServerValue; ServerValue.TIMESTAMP // eg. 1466094046 ( 参考1 , 参考2 ) 问题: 这样的保存/检索是在我的模型实例上获取服务器生成的创建日期的唯一方法吗? 如果是,你能否提出实施这种模式的方法? 我是否正确理解ServerValue.TIMESTAMP已经改变了谷歌收购Firebase? 更新:不,@ FrankkuPuffelen回复说在收购过程中没有任何改变。 注意: 我不打算在客户端使用new Date()因为我一直在阅读它并不安全,但如果你认为不同,请分享你的想法。

Firebase数据库依赖项崩溃应用程序

我正在尝试使用以下“ 为Android设置Firebase实时数据库 ”示例写入我的数据库,但应用程序在启动时崩溃。 这似乎是因为依赖: compile ‘com.google.firebase:firebase-database:9.2.1’ 崩溃日志: FATAL EXCEPTION: main Process: com.example.giat.myapplication, PID: 3874 java.lang.NoSuchMethodError: No static method zzeq(Landroid/content/Context;)Lcom/google/android/gms/internal/zzalp; in class Lcom/google/android/gms/internal/zzalp; or its super classes (declaration of ‘com.google.android.gms.internal.zzalp’ appears in /data/data/com.example.giat.myapplication/files/instant-run/dex/slice-com.google.firebase-firebase-database-9.2.1_b22e7bdbdba6ace0ee1e94f163c76d1f75b59f7e-classes.dex) at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) at com.google.firebase.FirebaseApp.zzek(Unknown Source) at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source) at android.content.ContentProvider.attachInfo(ContentProvider.java:1702) at android.content.ContentProvider.attachInfo(ContentProvider.java:1665) at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source) at android.app.ActivityThread.installProvider(ActivityThread.java:5417) at android.app.ActivityThread.installContentProviders(ActivityThread.java:4988) […]

如何检查Firebase应用是否已在Android上初始化

通过以下内容,第一次调用它时可以正常工作,但随后的“FirebaseApp名称[DEFAULT]已经存在!”的调用失败了。 public FirebaseDatabase conn(Context c) { FirebaseOptions options = new FirebaseOptions.Builder() .setApiKey(“key”) .setDatabaseUrl(“url”) .setApplicationId(“ID”) .build(); /////I tried Try and Catch with no success////// FirebaseApp app = FirebaseApp.initializeApp(c, options); /// for this : FirebaseApp app = FirebaseApp.initializeApp(c, options, “some_app”); //// will fail with “FirebaseApp name some_app already exists!” return FirebaseDatabase.getInstance(app); } 以上所有内容都是尝试连接到第二个Firebase应用程序。