Articles of firebase database

具有空视图的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应用程序。

Android Firebase Rest API身份validation

我目前正在使用Firebase Realtime数据库开发应用程序,但是我选择省略使用SDK从数据库中检索数据。 原因是我不希望我的代码与FireBase紧密相关,因为一旦构建应用程序,api本身将转移到基于自定义rest的api。 我根据文档使用REST和Firebase实现了api调用,没有问题 – POST,GET,DELETE等。 我遇到的问题是,如果我在数据库上启用任何types的身份validation,根据我需要发送带有请求的“access_token”的文档,但是我不知道从哪里检索它。 firebaseUser.getToken(true)返回看起来像JWT令牌的内容,如果我将其作为”access_token”发送,则无法识别该令牌。 我得到401 Unauthorized 我还按照说明设置了一个服务帐户,该帐户似乎生成了一个有效的令牌,但它并没有唯一地标识用户。 所以我的问题是,任何人都可以指出我如何获得所需的访问令牌,以识别哪个用户正在访问该API? 我的Firebase项目支持的登录选项是Google,Facebook和Twitter。

Firebase无法连接INTERNET

在我的应用中,我使用Firebase进行数据库管理。 现在,当我正在侦听特定位置的子节点的任何更改时,如果没有Internet连接,则不会触发回调。 firebase电话被卡住了。 我在用这个, FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance(); firebaseDatabase.setPersistenceEnabled(true); 因此,启用了持久性。 问题只出现在一个场景中。 当Firebase的本地持久性没有数据且互联网连接也不可用时。 我在用这个, addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { } @Override public void onCancelled(DatabaseError databaseError) { Timber.d(“Cancelled”); } }); 我没有得到针对该特定场景的两个回调中的任何一个。 我应该怎么做才能解决这种情况?

如何从android中的firebase数据库中检索特定节点

我想在我的Android应用程序中使用Firebase。 我正在关注保存和检索的文档,但是教程中使用的示例数据库(Dragon)与我的数据库具有不同的结构。 这是我将数据推送到firebase的代码 Firebase myFirebaseRef = new Firebase(“https://myfirebaseurl.firebaseio.com/android/saving-data/fireblog”); User userName = new User(socialNum, name, datofBirth, mob1, mob2, healthCondition); Firebase usersRef = myFirebaseRef.child(name); Map users = new HashMap(); users.put(name, userName); myFirebaseRef.push().setValue(users); 这样创建数据库格式 { “android” : { “saving-data” : { “fireblog” : { “-JiRtkpIFLVFNgmNBpMj” : { “Name” : { “birthDate” : “100”, “fullName” : “Name”, “healthCond” : […]

使用firebase添加额外的用户信息

我已将firebase auth与我的Android应用程序集成。 让我们说用户有一封邮件abc@abc.com 。 我想为用户添加一些额外的信息,比如用户名,职业和地址。 如何将用户auth表与我的Android应用程序连接起来呢? 我需要为此编写任何API吗?

Android中的RecyclerView的ValueEventListener与ChildEventListener

Firebase数据库用户知道有两个用于侦听Data的基本侦听器: ValueEventListener和ValueEventListener 。 当我们听一个对象时它很有用,但是当我们听一些收集时变得非常困难。 要指定问题,让我们假设我们有HackerNews提要,我们在Firebase中监听例如“posts”对象。 当然我们在我们的应用程序中使用RecyclerView来显示post,我认为好主意是使用FirebaseUI,但问题是我们想要在更改服务器端或测试时制作更抽象的应用程序。 所以我们会使用一些适配器,但这是另一个问题 。 正如我所提到的,我们有两个听众,问题哪个更好 ? 当我们使用ValueEventListener我们将获得整个集合,但是如果有任何更改,例如一个用户更改了post的内容,我们将不得不重新加载整个数据,这意味着通过昂贵的网络传输发送更多字节。 另一个问题是当我们使用multilisteners时,这是一个例子: Post有userId,但是我们要显示他的名字,所以在onDataChanged方法中我们获取用户数据,如下所示: postsReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot data : dataSnapshot.getChildren()) { Post post = data.getValue(Post.class); usersReference.child(post.getUserId()).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // Here we have user data } @Override public void onCancelled(FirebaseError firebaseError) { } […]

如何使用Firebase查询equalTo(值,键)?

作为firebase中的新手,我试图在这个简单的用例中模仿一种“where子句”请求来检索用户的钱包: User 48bde8f8-3b66-40bc-b988-566ccc77335c email: “toto@acme.com” username: “userTest1” UserWallet F4PvtvNT2Z coins: 26 someList elemet1 elemet2 user: “48bde8f8-3b66-40bc-b988-566ccc77335c” 首先,我尝试像这样编写我的请求: Firebase root = new Firebase(“https://myApp.firebaseio.com/”); Firebase ref = root.child(“UserWallet”); Query query = ref.equalTo(“48bde8f8-3b66-40bc-b988-566ccc77335c”, “user”); 结果是null,所以我写了这个查询: Query query = ref.orderByChild(“user”).equalTo(“48bde8f8-3b66-40bc-b988-566ccc77335c”, “user”); 结果再次为null。 检索钱包的唯一方法是使用此查询: Query query = ref.orderByChild(“user”).equalTo(“48bde8f8-3b66-40bc-b988-566ccc77335c”); 那么在使用“equalTo()”之前我是否应该始终使用en“orderByChild()”查询? 那么,查询“equalTo(String value,String key)”与“equalTo(String value)”的目的是什么,因为只有第二个才能正常工作?