Создание внешнего ключа для комнаты Android вручную для вложенного массива

Мой ответ json:

{
    "categories": [
        {
            "categoryName": "Events",
            "entityId": "QwN9goUaw6",
             .....
        }
    ],
    "entityId": "T1nnwwpjOM"
}

Мой первоначальный план состоял в том, чтобы следовать тому, как Google сделал это в своем GithubSampleBrowser, за исключением того, что они меняют целое число списка на строку списка с использованием методов StringUtil, поэтому я решил изменить тактику и попытаться следовать тому, что некоторые другие сказали здесь, чтобы преобразовать его в String и обратно в ArrayList.

Я думал, что у меня есть правильный запрос, который я хотел в конечном итоге сделать, т.е.

@Query("SELECT * FROM category_table WHERE entityId in (:entityId) ORDER BY sortIndex ASC")
public abstract LiveData<List<Category>> loadById(List<String> entityId);

Мои модели в настоящее время выглядят так:

КатегорияРезультат поиска

@NonNull
@PrimaryKey
private String entityId;
@Nullable
private String query;
public List<Category> categories;
private String lastUpdated;

Категория

@NonNull
@PrimaryKey(autoGenerate = true)
private int id;
private Integer sortIndex;
private String storyboardId;
@NonNull
private String entityId;
private String categoryName;
private String menuId;

Моя попытка преобразователей:

@TypeConverter
public static List<Category> fromStringToCategory(String value) {
    if (value != null) {
        Gson gson = new Gson();
        Type type = new TypeToken<List<Category>>() {
        }.getType();
        List<Category> categoryList = gson.fromJson(value,type);
        return categoryList;
    }
    return null;
}

@TypeConverter
public static String fromCategoryToString(List<Category> categories) {
    if (categories != null) {
        Gson gson = new Gson();
        Type type = new TypeToken<List<Category>>() {
        }.getType();
        String json = gson.toJson(categories, type);
        return json;
    }
    return null;
}

Я подумал, что может быть проще создать список идентификаторов объектов категории, входящей в категориюSearchResult, и построить между ними @Relationship. Я просмотрел документацию по Android для пользователя и домашних животных, но не могу правильно связать ее с моими данными, поэтому любые советы будут очень признательны.

Не знаете, как снять это с удержания?

Shade 24.05.2019 00:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце концов, я сохранил их отдельно, и, поставив запрос в качестве первичного ключа, он также, похоже, принимает пустой запрос, в котором я не был уверен, что позволит перезаписать его. Затем я просто сделал обратное для удаления, используя функцию in, вероятно, можно было бы использовать отношения, построенные для каскадного удаления, но на данный момент это работает достаточно хорошо.

Итак, вкратце

Всякий раз, когда мои mutablelivedata изменяются, он использует этот запрос для передачи в мой CategorySearchResult, который возвращает entityId на основе этого в виде списка. Затем я помещаю категории отдельно в свой собственный класс, как обычно.

Другие вопросы по теме