Java Android комната Список в классе Не могу понять, как сохранить это поле в базе данных - PullRequest
0 голосов
/ 10 мая 2019

Я не могу установить приложение на свой телефон, потому что вижу эту ошибку:

ошибка: Не могу понять, как сохранить это поле в базе данных.Вы можете рассмотреть возможность добавления конвертера типов для него.

Это происходит потому, что у меня в классе Это:

@Entity(tableName = "last_state")
public class LastStateTable {

    @PrimaryKey(autoGenerate = false)
    @ColumnInfo(name = "id")
    long id;
    @ColumnInfo(name = "date")
    String date;
    List<Icon> icon;
    }

    @Entity(tableName = "icon" )
    public class Icon {
        @PrimaryKey(autoGenerate = false)
        @ColumnInfo(name = "id")
        int id;
        @ColumnInfo(name = "nr")
        int nr;
        @ColumnInfo(name = "type")
        int type;
        @ColumnInfo(name = "value")
        int value;
    }

Он не может быть установлен на устройстве, потому что у меня есть список внутри, чтоЯ тоже должен?

Я пытаюсь сделать это, но у меня есть некоторые ошибки:

   public class Converters {
    @TypeConverter
    public static ArrayList<Icon> fromString(String value) {
        Type listType = new TypeToken<ArrayList<Icon>>() {}.getType();
        return new Gson().fromJson(value, listType);
    }

    @TypeConverter
    public static String fromArrayList(ArrayList<Icon> list) {
        Gson gson = new Gson();
        return gson.toJson(list);
    }
}

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете добавить конвертер типов, чтобы указать комнате, как обращаться с данными списка

Примерно так

/**
 * Type Converter to instruct Room how to serialize and deserialize List(s) of data
 */
public class ListConverter {

    private static Gson gson = new Gson();

    @TypeConverter
    public static List<Icon> stringToIconList(String data) {

        if (data == null) {
            return Collections.emptyList();
        }

        Type listType = new TypeToken<List<Icon>>() {}.getType();

        return gson.fromJson(data, listType);
    }


    @TypeConverter
    public static String iconListToString(List<Icon> list) {

        return gson.toJson(list);
    }
}

А также вы должны аннотировать поле списка значков для комнатытоже понимаю, что это поле и знать, какой конвертер использовать

@Entity(tableName = "last_state")
public class LastStateTable {

    @PrimaryKey(autoGenerate = false)
    @ColumnInfo(name = "id")
    long id;
    @ColumnInfo(name = "date")
    String date;
    @TypeConverters(ListConverter.class) // This is missing in your code
    @ColumnInfo(name = "icons") // This is missing in your code
    List<Icon> icon;
}

@Entity(tableName = "icon" )
public class Icon {
    @PrimaryKey(autoGenerate = false)
    @ColumnInfo(name = "id")
    int id;
    @ColumnInfo(name = "nr")
    int nr;
    @ColumnInfo(name = "type")
    int type;
    @ColumnInfo(name = "value")
    int value;
}

И ошибка должна исчезнуть

Надеюсь, это поможет

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...