Firebase使用地图保存对象

时间:2018-03-15 14:17:34

标签: android firebase firebase-realtime-database

我不知道为什么但是我无法将我的对象保存到FirebaseDatabase。 有人能帮助我吗?

我的对象:

public class ChatEntity {

    public static final String ENTITY_IDENTIFIER = "chats";

    private String id;
    private String chatTitle;
    private Map<String, ProfileEntity> users;
    private Map<String, ProfileEntity> administratorsUser;
    private Bitmap chatIcon;

    ... Getters and Setters ...

}

我用以下方法保存:

FirebaseDatabase.getInstance().getReference(ChatEntity.ENTITY_IDENTIFIER).child(chat.getId()).setValue(chat);

只保存了这个:

{
  "1521122180142&Teste&tduWYxVHRVPVIx6Sv4p8fNwKKJi2" : {
    "chatTitle" : "Teste",
    "id" : "1521122180142&Teste&tduWYxVHRVPVIx6Sv4p8fNwKKJi2"
  }
}

字段chatIconnull,所以没关系。但是这两张地图有1个和2个托管,并且没有得到保存。

如何保存?

2 个答案:

答案 0 :(得分:1)

您可能会看到,Firebase数据库仅接受您尝试保存的Bitmap个对象。不保证保存任何其他对象,特别是Bitmap对象。如果您想保存String

  • 使用Firebase存储
  • Bitmap获取 Base64 HashMap

要保存嵌套的Map,您可能需要多次调用数据库(每个/一个),或转换地图&#39;每次编辑一个孩子时,都会使用 var myInbox = NotificationCompat.InboxStyle() for (items in items) { myInbox.addLine(item.title) } val notificationBuilder = NotificationCompat.Builder(this, ChannelId) .setSmallIcon(...) .setContentTitle("Got news") .setAutoCancel(true) .setSound(...) .setVisibility(Notification.VISIBILITY_PUBLIC) .setContentIntent(pendingIntent) .setLights(...) .setStyle(myInbox) 的值进入字符串(虽然它们都非常混乱)。

答案 1 :(得分:0)

根据official documentationBitmap在Firebase实时数据库中不是受支持的数据类型。请记住,作为一般规则,我会说,永远不要使用base64。您根本不需要对图像进行base64编码。如果要存储图像,请不要使用Firebase实时数据库,请使用Firebase Storage

要使用usersadministratorsUser填充数据库,请使用ProfileEntity个对象更改这些地图的类型。如果要使用地图,可以使用它直接在DatabaseReference对象上设置/更新它们。