Комната, хранящая карту <String, List <String>или многие ко многим - PullRequest
0 голосов
/ 09 марта 2019

В настоящее время класс 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 Ответ

1 голос
/ 10 марта 2019

Вы не можете использовать карту как переменную для хранения в базе данных.Не устанавливать ID - Room автоматически сгенерирует его для Вас.Как подсказывает Android Studio, вы можете использовать TypeConverter для карты: Room TypeConverter для карты

...