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

Мой ответ json:

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

Мой первоначальный план состоял в том, чтобы следить за тем, как Google сделал это в своем GithubSampleBrowser, за исключением того, что они меняют значение List Integer на List String с помощью методов 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);

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

КатегорияSearchResult

@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;
}

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

1 Ответ

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

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

Итак, в итоге

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

...