【问题标题】:Room, storing Map<String, List<String> or many to many relation房间,存储 Map<String, List<String> 或多对多关系
【发布时间】:2019-03-09 20:16:03
【问题描述】:

目前我的 Contact 类看起来像

package com.example.courseproject;

import java.util.EnumMap;
import java.util.List;
import java.util.Map;

import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "contact_table")
public class Contact {

    @PrimaryKey(autoGenerate = true)
    private int id;

    private String firstName;

    private String lastName;

    private Map<String, List<String>> contacts; //Type, Values. Example { "email": {"email_1", "email_2"}}

    public Contact(String firstName, String lastName, Map<String, List<String>> contacts) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.contacts = contacts;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public Map<String, List<String>> getContacts() {
        return contacts;
    }
}

在第 20 行(地图声明)上写着

...\Contact.java:20: error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
    private Map<String, List<String>> contacts; //Type, Values. Example { "email": {"email_1", "email_2"}}

这个想法是制作一个电话簿,它可以存储(当然)多个“人”,每个人可以有不同的联系方式(以及不同数量的人)。

可以用地图完成吗?如果是这样,我可以简单地使用 JSON lib 来做那件事吗?如果不是,你有什么建议?

据我所知,“联系人”字段和联系人之间的多对多关系应该有“表格”。我真的很喜欢 JSON 的想法,因为它简单快速,但我知道它不是最好的解决方案。

【问题讨论】:

    标签: android dictionary many-to-many android-sqlite android-room


    【解决方案1】:

    您不能使用 Map 作为变量来存储在数据库中。 不要设置 ID - Room 会自动为您生成它。正如 Android Studio 的提示所说 您可以将 TypeConverter 用于地图: Room TypeConverter for map

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 2020-08-01
      • 2018-09-22
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多