У меня есть это json:
{
"ProductCoreId":0,
"LifeCycle":1,
"OwnerPartyRoleId":0,
"TriggerImages":null,
"TriggerImagesUrl":[
"/Files/Images/Channels/sdp.png"
],
"TriggerChannelIds":[
1287
],
"ActionImages":null,
"ActionImagesUrl":[]
}
Как видите, у меня есть 2 списка TriggerImagesUrl
и TriggerChannelIds
. Теперь я хочу сохранить эту модель json в sqlite, поэтому я сделал эту модель класса в соответствии с моим json для сохранения в базе данных:
class ToolsByChannelIdDbModel {
int productCoreId;
int lifeCycle;
int ownerPartyRoleId;
Null triggerImages;
String triggerImagesUrl;
String triggerChannelIds;
ToolsByChannelIdDbModel(
{this.productCoreId,
this.lifeCycle,
this.ownerPartyRoleId,
this.triggerImages,
this.triggerImagesUrl,
this.triggerChannelIds});
ToolsByChannelIdDbModel.fromJson(Map<String, dynamic> json) {
productCoreId = json['ProductCoreId'];
lifeCycle = json['LifeCycle'];
ownerPartyRoleId = json['OwnerPartyRoleId'];
triggerImages = json['TriggerImages'];
triggerImagesUrl = json['TriggerImagesUrl'];
triggerChannelIds = json['TriggerChannelIds'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ProductCoreId'] = this.productCoreId;
data['LifeCycle'] = this.lifeCycle;
data['OwnerPartyRoleId'] = this.ownerPartyRoleId;
data['TriggerImages'] = this.triggerImages;
data['TriggerImagesUrl'] = this.triggerImagesUrl;
data['TriggerChannelIds'] = this.triggerChannelIds;
return data;
}
}
Поскольку вы теперь sqlite не принимаете список как тип, так я сделал список в виде json строки, поэтому я сохранил это так:
ToolsByChannelIdDbModel model = ToolsByChannelIdDbModel();
model.productCoreId = item.productCoreId;
model.lifeCycle = item.lifeCycle;
model.ownerPartyRoleId = item.ownerPartyRoleId;
model.triggerImagesUrl = jsonEncode(item.triggerImagesUrl);
model.triggerChannelIds = jsonEncode(item.triggerChannelIds);
db.insert("tools_table", model.toJson());
item.triggerImagesUrl
и item.triggerChannelIds
- это список, и я отображаю их в json строку для сохранения в базе данных. До сих пор все хорошо и эти списки сохраняются в базе данных. Проблема возникает, когда я делаю запрос и хочу декодировать результат db.rawQuery
в мой объект.
Future<List<ToolsByChannelIdDbModel>> getTools(
int channelId) async {
List<ToolsByChannelIdDbModel> list =
try {
var result = await DBProvider.db.getToolsById(channelId);
result.forEach((item) {
list.add(ToolsByChannelIdDbModel.fromJson(item));
});
} catch (e) {
print(e);
}
return list;
}
}
await DBProvider.db.getToolsById(channelId);
часть работает нормально и возвращает карту данных и triggerImagesUrl
и triggerChannelIds
являются json строкой, но когда я хочу преобразовать карту в мой объект с помощью ToolsByChannelIdDbModel.fromJson(item)
в этом разделе:
String triggerImagesUrl; String triggerChannelIds;
В модели я получил ошибку, потому что я объявляю эти поля как String, но они являются списками.
Как сохранить эти списки в базе данных и как сопоставить их с объектом?