房间,存储Map <string,list <string =“”>或多对多关系

时间:2019-03-09 20:16:04

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

目前,我有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的想法,因为它简单快捷,但是我知道这不是最好的解决方案。

1 个答案:

答案 0 :(得分:1)

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