Мой ответ 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 для пользователя и домашних животных, но не могу правильно связать ее с моими данными, поэтому любые советы будут очень признательны.
В конце концов, я сохранил их отдельно, и, поставив запрос в качестве первичного ключа, он также, похоже, принимает пустой запрос, в котором я не был уверен, что позволит перезаписать его. Затем я просто сделал обратное для удаления, используя функцию in, вероятно, можно было бы использовать отношения, построенные для каскадного удаления, но на данный момент это работает достаточно хорошо.
Итак, вкратце
Всякий раз, когда мои mutablelivedata изменяются, он использует этот запрос для передачи в мой CategorySearchResult, который возвращает entityId на основе этого в виде списка. Затем я помещаю категории отдельно в свой собственный класс, как обычно.
Не знаете, как снять это с удержания?