Flutter 对于包含贴图的贴图,SQFLite(颤振)插入失败
有人能确认SQFLite是否支持包含映射的映射吗?我确实在这个网站上看到了下面的帖子,也许这就是答案 在我的情况下,我有两个模型类,我正在工作Flutter 对于包含贴图的贴图,SQFLite(颤振)插入失败,flutter,dart,sqflite,Flutter,Dart,Sqflite,有人能确认SQFLite是否支持包含映射的映射吗?我确实在这个网站上看到了下面的帖子,也许这就是答案 在我的情况下,我有两个模型类,我正在工作 房子 狗 House包括一个名为pets的字段,它是一个列表 我在每个类中都有一个构造函数和工厂方法,负责根据需要将映射/对象转换为映射/对象,以便发送到SQFLite并从中检索信息 模型类 狗 类狗{ 最终int id; 最后的线品种; 最后的字符串名; 最终积分; 狗({this.id,this.breed,this.name,this.age
- 房子
- 狗
类狗{
最终int id;
最后的线品种;
最后的字符串名;
最终积分;
狗({this.id,this.breed,this.name,this.age});
//将行插入数据库时使用,包括id字段
映射toMap(){
最终映射=映射();
map['id']=id;
地图['bride']=品种;
映射['name']=名称;
地图['age']=年龄;
返回图;
}
//从数据库返回行并转换为对象时使用
工厂狗。从地图(地图数据)=>狗(
id:data['id'],
品种:数据[“品种”],
名称:数据['name'],
年龄:数据[‘年龄’]
);
}
房子
导入“dog.dart”;
班房{
最终int id;
最后的字符串名;
最终字符串颜色;
最终宠物名单;
House({this.id,this.name,this.color,this.pets});
//将行插入数据库时将使用
映射toMap(){
最终映射=映射();
map['id']=id;
映射['name']=名称;
地图['color']=颜色;
如果(this.pets!=null){
map['pets']=this.pets.map((pet)=>pet.toMap()).toList();
}
返回图;
}
//从数据库返回行并转换为对象时使用
factory House.fromMap(地图数据){
返回屋(
id:data['id'],
名称:数据['name'],
颜色:数据['color'],
宠物:数据['pets']!=null
?(数据['pets']作为列表).map((pet)=>Dog.fromMap(pet)).toList()
:null,
);
}
}
插入新房子的方法
Future<int> addNewHome(House house) async {
// Attempt to add the house to the DB
var client = await database.db;
int result = await client.insert(HomesSchema.tblHomes, house.toMap(), conflictAlgorithm: ConflictAlgorithm.replace);
_homes.add(house);
return result;
}
Future addNewHome(House-House)异步{
//尝试将房屋添加到DB
var client=await database.db;
int result=wait client.insert(homeschema.tblHomes,house.toMap(),conflictAlgorithm:conflictAlgorithm.replace);
_加上(房子);
返回结果;
}
当我尝试执行插入时,我得到以下错误
E/flutter ( 586): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: DatabaseException(java.util.HashMap cannot be cast to java.lang.Integer) sql 'INSERT OR REPLACE INTO homes (id, name, color, pets) VALUES (?, ?, ?, ?)' args [1, Smith, Green, [{name: Mackie, id: 1, breed: Rottweiler, age: 8}, {name: Tanner, id: 2, breed: Mastiff, age: 8}]]}
E/flutter ( 586): #0 wrapDatabaseException (package:sqflite/src/exception_impl.dart:12:7)
E/flutter ( 586): <asynchronous suspension>
E/flutter ( 586): #1 SqfliteDatabaseFactoryImpl.wrapDatabaseException (package:sqflite/src/factory_impl.dart:25:7)
E/flutter ( 586): #2 SqfliteDatabaseMixin.safeInvokeMethod (package:sqflite/src/database_mixin.dart:188:15)
E/flutter ( 586): #3 SqfliteDatabaseMixin.txnRawInsert.<anonymous closure> (package:sqflite/src/database_mixin.dart:363:14)
E/flutter ( 586): #4 SqfliteDatabaseMixin.txnSynchronized.<anonymous closure> (package:sqflite/src/database_mixin.dart:307:22)
E/flutter ( 586): #5 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:32:26)
E/flutter ( 586): #6 SqfliteDatabaseMixin.txnSynchronized (package:sqflite/src/database_mixin.dart:303:43)
E/flutter ( 586): #7 SqfliteDatabaseMixin.txnWriteSynchronized (package:sqflite/src/database_mixin.dart:325:7)
E/flutter ( 586): #8 SqfliteDatabaseMixin.txnRawInsert (package:sqflite/src/database_mixin.dart:362:12)
E/flutter ( 586): #9 SqfliteDatabaseExecutorMixin.rawInsert (package:sqflite/src/database_mixin.dart:49:15)
E/flutter ( 586): #10 SqfliteDatabaseExecutorMixin.insert (package:sqflite/src/database_mixin.dart:59:12)
E/flutter ( 586): #11 Homes.addNewHome (package:search_list_view/providers/homes.dart:19:31)
E/flutter ( 586): <asynchronous suspension>
E/flutter ( 586): #12 _MyAppState.build.<anonymous closure> (package:search_list_view/main.dart:95:26)
E/flutter ( 586): #13 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
E/flutter ( 586): #14 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
E/flutter ( 586): #15 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter ( 586): #16 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486:11)
E/flutter ( 586): #17 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:264:5)
E/flutter ( 586): #18 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:199:7)
E/flutter ( 586): #19 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:467:9)
E/flutter ( 586): #20 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter ( 586): #21 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:117:9)
E/flutter ( 586): #22 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter ( 586): #23 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:115:18)
E/flutter ( 586): #24 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:7)
E/flutter ( 586): #25 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter ( 586): #26 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter ( 586): #27 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter ( 586): #28 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter ( 586): #29 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter ( 586): #30 _rootRunUnary (dart:async/zone.dart:1138:13)
E/flutter ( 586): #31 _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter ( 586): #32 _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7)
E/flutter ( 586): #33 _invoke1 (dart:ui/hooks.dart:273:10)
E/flutter ( 586): #34 _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5)
E/flutter ( 586):
E/flatter(586):[ERROR:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:数据库异常(java.util.HashMap不能转换为java.lang.Integer)sql“插入或替换到家庭(id、名称、颜色、宠物)值(?,,?)”args[1,Smith,Green,[{姓名:Mackie,id:1,品种:Rotweiler,年龄:8},{姓名:坦纳,身份证:2,品种:獒,年龄:8}]}
E/flatter(586):#0 wrapDatabaseException(包:sqflite/src/exception_impl.dart:12:7)
E/颤振(586):
E/颤振(586):#1 SqfliteDatabaseFactoryImpl.wrapDatabaseException(包:sqflite/src/factory\u impl.dart:25:7)
E/flatter(586):#2 SqfliteDatabaseMixin.safeInvokeMethod(包:sqflite/src/database_mixin.dart:188:15)
E/颤振(586):#3 sqflitedDatabaseMixin.txnRawInsert。(软件包:sqflite/src/database_mixin.dart:363:14)
E/颤振(586):#4 SqfliteDatabaseMixin.txn同步。(软件包:sqflite/src/database_mixin.dart:307:22)
E/flatter(586):#5 BasicLock.synchronized(包:synchronized/src/basic_lock.dart:32:26)
E/颤振(586):#6 SqfliteDatabaseMixin.txn已同步(包:sqflite/src/database_mixin.dart:303:43)
E/flatter(586):#7 SqfliteDatabaseMixin.txnWriteSynchronized(包:sqflite/src/database_mixin.dart:325:7)
E/颤振(586):#8 SqfliteDatabaseMixin.txnRawInsert(包装:sqflite/src/database_mixin.dart:362:12)
E/flatter(586):#9 SqfliteDatabaseExecutorMixin.rawsert(包:sqflite/src/database_mixin.dart:49:15)
E/flatter(586):#10 SqfliteDatabaseExecutorMixin.insert(包:sqflite/src/database_mixin.dart:59:12)
E/flatter(586):#11 Homes.addNewHome(包:search_list_view/providers/Homes.dart:19:31)
E/颤振(586):
E/颤振(586):#12 _MyAppState.build。(软件包:搜索列表视图/main.dart:95:26)
E/颤振(586):#13InkResponseEstate.handleTap(包装:颤振/src/材料/墨水井。省道:706:14)
E/颤振(586):#14#。(包装:颤振/src/材料/墨水井。省道:789:36)
E/flatter(586):#15 GestureRecognizer.invokeCallback(包:flatter/src/signatures/recognizer.dart:182:24)
E/flatter(586):#16 TapGestureRecognitor.handleTapUp(包:flatter/src/signatures/tap.dart:486:11)
E/flatter(586):#17 BaseTapgestureRecognitor.#检查(软件包:flatter/src/signatures/tap.dart:264:5)
E/flatter(586):#18 BaseTapgestureRecognitor.handlePrimaryPointer(包:flatter/src/signatures/tap.dart:199:7)
E/颤振(586):#19 PrimaryPointerGestureRecognizer.handleEvent(包:颤振/src/signatures/recognizer.dart:467:9)
E/flatter(586):#20点路由器。#调度(包:flatter/src/signatures/pointer#u路由器。dart:76:12)
E/颤振(586):#21点外部。#调度事件路线。(包装:颤振/src/signatures/pointer_router.省道:117:9)
E/flatter(586):#22 LinkedHashMapMixin.forEach(dart:collection patch/compact_hash.dart:379:8)
E/flatter(586):#23点路由器。#调度事件路由(包:flatter/src/signatures/pointer#路由器。dart:115:18)
E/flatter(586):#24 PointerRouter.route(包:flatter/src/signatures/pointer_router.dart:101:7)
E/flatter(586):#25 GestureBinding.handleEvent(包装:flatter/src/signatures/binding.dart:218:19)
E/flatter(586):#26 GestureBinding.dispatchEvent(包:flatter/src/signatures/binding.dart:198:22)
电子/颤振(586):#27手势绑定。#手持指针事件(包装:颤振/src/手势/绑定。省道:156:7)
E/flatter(586):#28手势绑定。(u flushPointerEventQueue(包:flatter/src/signatures/binding.d
Future<int> addNewHome(House house) async {
// Attempt to add the house to the DB
var client = await database.db;
int result = await client.insert(HomesSchema.tblHomes, house.toMap(), conflictAlgorithm: ConflictAlgorithm.replace);
_homes.add(house);
return result;
}
E/flutter ( 586): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: DatabaseException(java.util.HashMap cannot be cast to java.lang.Integer) sql 'INSERT OR REPLACE INTO homes (id, name, color, pets) VALUES (?, ?, ?, ?)' args [1, Smith, Green, [{name: Mackie, id: 1, breed: Rottweiler, age: 8}, {name: Tanner, id: 2, breed: Mastiff, age: 8}]]}
E/flutter ( 586): #0 wrapDatabaseException (package:sqflite/src/exception_impl.dart:12:7)
E/flutter ( 586): <asynchronous suspension>
E/flutter ( 586): #1 SqfliteDatabaseFactoryImpl.wrapDatabaseException (package:sqflite/src/factory_impl.dart:25:7)
E/flutter ( 586): #2 SqfliteDatabaseMixin.safeInvokeMethod (package:sqflite/src/database_mixin.dart:188:15)
E/flutter ( 586): #3 SqfliteDatabaseMixin.txnRawInsert.<anonymous closure> (package:sqflite/src/database_mixin.dart:363:14)
E/flutter ( 586): #4 SqfliteDatabaseMixin.txnSynchronized.<anonymous closure> (package:sqflite/src/database_mixin.dart:307:22)
E/flutter ( 586): #5 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:32:26)
E/flutter ( 586): #6 SqfliteDatabaseMixin.txnSynchronized (package:sqflite/src/database_mixin.dart:303:43)
E/flutter ( 586): #7 SqfliteDatabaseMixin.txnWriteSynchronized (package:sqflite/src/database_mixin.dart:325:7)
E/flutter ( 586): #8 SqfliteDatabaseMixin.txnRawInsert (package:sqflite/src/database_mixin.dart:362:12)
E/flutter ( 586): #9 SqfliteDatabaseExecutorMixin.rawInsert (package:sqflite/src/database_mixin.dart:49:15)
E/flutter ( 586): #10 SqfliteDatabaseExecutorMixin.insert (package:sqflite/src/database_mixin.dart:59:12)
E/flutter ( 586): #11 Homes.addNewHome (package:search_list_view/providers/homes.dart:19:31)
E/flutter ( 586): <asynchronous suspension>
E/flutter ( 586): #12 _MyAppState.build.<anonymous closure> (package:search_list_view/main.dart:95:26)
E/flutter ( 586): #13 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14)
E/flutter ( 586): #14 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36)
E/flutter ( 586): #15 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter ( 586): #16 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486:11)
E/flutter ( 586): #17 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:264:5)
E/flutter ( 586): #18 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:199:7)
E/flutter ( 586): #19 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:467:9)
E/flutter ( 586): #20 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter ( 586): #21 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:117:9)
E/flutter ( 586): #22 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter ( 586): #23 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:115:18)
E/flutter ( 586): #24 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:7)
E/flutter ( 586): #25 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter ( 586): #26 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter ( 586): #27 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter ( 586): #28 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter ( 586): #29 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter ( 586): #30 _rootRunUnary (dart:async/zone.dart:1138:13)
E/flutter ( 586): #31 _CustomZone.runUnary (dart:async/zone.dart:1031:19)
E/flutter ( 586): #32 _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7)
E/flutter ( 586): #33 _invoke1 (dart:ui/hooks.dart:273:10)
E/flutter ( 586): #34 _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5)
E/flutter ( 586):
class Menu {
@JsonKey(name: "status")
String status;
@JsonKey(name: "data")
MenuListData menuListData;
Menu(this.status, this.menuListData);
factory Menu.fromJson(Map<String,dynamic>
json)=>_$MenuFromJson(json);
Map<String, dynamic> toJson() => _$MenuToJson(this);
}
Menue menuList =
await getIt<LiveMenuRepository>().getMenuResponse(menuPost);
//decode the response to String format
String menuResponseString = jsonEncode(menuList);
//convert the string to Map of <String,dynamic> format
Map<String, dynamic> menuResponseMap = {"menu": menuResponseString};
//store this Map response in to local database
int menuStored = await getIt<LocalMenuRepository>().insertMenuResponseData(menuResponseMap);
Future<int> insertMenuResponseData(Map<String,dynamic> menuResponse) async {
final db = await dbProvider.database;
var result = db.insert(menuTable, menuResponse);
return result;
}
final Map<String, dynamic> menuList = await getIt<LocalMenuRepository>().getMenuResponseString();
// if(menuList!=null) {
menuList.forEach((key, value) {
if (key == "menu") {
storedMenu = value ;
}
});
//decode the string back to Map Object
final dynamic menuMap = jsonDecode(storedMenu);
//getting the Menu object using fromJson method
final Menu menuListNameResponse = Menu
.fromJson(menuMap as Map<String,dynamic>);
Future<Map<String,dynamic>> getMenuResponse() async {
final db = await dbProvider.database;
List<Map<String, dynamic>> result;
result = await db.rawQuery('SELECT * FROM $menuTable');
// print(result[0]);
if (result.length > 0) {
return result[0];
}
return null;
}