gpt4 book ai didi

java - Firebase 实时数据库通常是如何收费的?

转载 作者:行者123 更新时间:2023-11-29 23:30:35 29 4
gpt4 key购买 nike

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

 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 中。

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

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

最佳答案

As you can see I have used messageRef.keepSynced(true); for the offline feature.

如果您希望即使离线也能查询您的数据库,您应该使用以下代码行:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

而不是 messageRef.keepSynced(true); 正如您现在所说的那样。使用上述代码行时,您告诉 Firebase 创建数据库的本地副本。

Every time the user opens this activity, firebase will get those 200 messages from database again or is it once?

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

How will I be getting charged on this?

根据 Firebase Pricing Plans .

And lastly, putting 200 messages(only text) in the recyclerView is fine? Or should I use pagination?

您决定使用 RecyclerView 而不是简单的 ListView 来显示消息是件好事,因为 View 会不断回收。如果有 200 条消息,我建议您实现分页,以较小的 block 加载数据,假设当时有 10 条或 15 条消息。也许您只对阅读 30 条消息感兴趣,为什么要下载所有消息?

关于java - Firebase 实时数据库通常是如何收费的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52762813/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com