Java Firebase实时数据库通常收费多少?

Java Firebase实时数据库通常收费多少?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,所以我的应用程序中有这个聊天功能。我正在检索这样的消息: private void loadmessage(String class_id, String email_red) { DatabaseReference messageRef = mRootRef.child("Announcement").child(email_red).child(class_id); messageRef.keepSynced(true);

所以我的应用程序中有这个聊天功能。我正在检索这样的消息:

 private void loadmessage(String class_id, String email_red) {
            DatabaseReference messageRef = mRootRef.child("Announcement").child(email_red).child(class_id);
            messageRef.keepSynced(true);

            messageRef.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String s) {

                    String messageKey = dataSnapshot.getKey();
                    Message message = dataSnapshot.getValue(Message.class).withID(messageKey);
                    messageList.add(message);
                    keyList.add(dataSnapshot.getKey());
                    mAdapter.notifyDataSetChanged();
                    mMessagesList.scrollToPosition(messageList.size() - 1);
                }

                @Override
                public void onChildChanged(@NonNull DataSnapshot dataSnapshot, String s) {
                    String messageKey = dataSnapshot.getKey();
                    Message message = dataSnapshot.getValue(Message.class).withID(messageKey);
                    int index = keyList.indexOf(messageKey);
                    messageList.set(index, message);
                    mAdapter.notifyDataSetChanged();
                }

                @Override
                public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                    int index = keyList.indexOf(dataSnapshot.getKey());
                    messageList.remove(index);
                    keyList.remove(index);
                    mAdapter.notifyDataSetChanged();
                }

                @Override
                public void onChildMoved(@NonNull DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        } 
如您所见,我使用了
messageRef.keepSynced(true)用于脱机功能

现在让我们假设最多可以有100-200条消息(只有文本),我将它们都放在
RecyclerView

现在我的问题是:每次用户打开此活动时,firebase都会再次从数据库中获取这200条消息,还是一次?我将如何收取这方面的费用

最后,在recyclerView中放入200条消息(仅文本)可以吗?还是应该使用分页

如您所见,我使用了messageRef.keepSynced(true);用于脱机功能

如果希望在脱机状态下也能查询数据库,则应使用以下代码行:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);
而不是
messageRef.keepSynced(true)就像你现在说的那样。当使用上述代码行时,您告诉Firebase创建数据库的本地副本

每次用户打开此活动时,firebase都会再次从数据库中获取这200条消息,还是仅此一次

如果每次启动活动时都调用
loadmessage()
方法,则表示在
messageRef
对象上添加了
ChildEventListener
。如果只想获取一次数据,则应使用ListenerForSingleValueEvent
,这意味着侦听器将精确地读取数据。这意味着您的
onDataChange()
方法将使用当前值触发(如果可用,则从缓存触发,否则从Firebase服务器触发),然后立即停止侦听

我将如何收取这方面的费用

根据

最后,在recyclerView中放入200条消息(仅文本)可以吗?还是应该使用分页


很好,您决定使用
RecyclerView
而不是简单的
ListView
来显示消息,因为视图是不断循环的。在有200条消息的情况下,我建议您实现分页,以较小的方式加载数据,比如说一次10或15条消息。也许你会对阅读30条信息感兴趣,为什么要下载所有这些信息?

如果你直接联系谷歌不是更好吗?回答得很好。现在我使用的是
FirebaseDatabase.getInstance().setPersistenceEnabled(true)。现在您可以看到,我有3种方法,即
onchildeded()
onChildChanged()
onChildRemoved()
。如果我使用ListenerForSingleValueEvent
我就不会有这些方法。那么我是否能够执行诸如删除和编辑之类的操作呢?“如果我使用ListenerForSingleValueEvent,我就没有这些方法了。”。是的,没错。您只有一个(
onDataChange()
)可以为您处理所有这些事件。是的,你可以。