【问题标题】:how can i add the object in flutter?如何在颤振中添加对象?
【发布时间】:2023-03-18 08:45:01
【问题描述】:
class DBHelper {
  DBHelper._();
  static final DBHelper _db = DBHelper._();
  factory DBHelper() => _db;
  static Database _database;
  Future<Database> get database async {
    if(_database != null) return _database;
    _database = await initDB();
    return _database;
  }

  initDB() async {
    Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, 'MemolistDB.db');
    return await openDatabase(
        path,
        version: 1,
        onCreate: (db, version) async {
          await db.execute('''
          CREATE TABLE $tableName(
          memoTitle TEXT,
          memoContent TEXT,
          memoId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
          boxOk INTEGER,    
          memoTimestamps TEXT,
          )
        ''');
        },
        onUpgrade: (db, oldVersion, newVersion){}
    );
  }

  insertData(Memolist memolist) async {
    final db = await database;
    var res = await db.insert(tableName, memolist.toJson());
    return res;
  }

class Memolist {
  String memoTitle;
  String memoContent;
  int memoId;
  int boxOk;   //0:false, 1:true
  List<MemoTimestamp> memoTimestamps;

  Memolist({this.memoTitle, this.memoContent, this.memoId,this.boxOk, this.memoTimestamps });

  factory Memolist.fromJson(Map<String, dynamic> json) => Memolist(
    memoTitle: json["memoTitle"],
    memoContent: json["memoContent"],
    memoId: json["memoId"] ,
    boxOk: json["boxOk"] ,
    memoTimestamps: List<MemoTimestamp>.from(json["memoTimestamps"].map((x) =>MemoTimestamp.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "memoTitle":memoTitle,
    "memoContent":memoContent,
    "memoId":memoId,
    "boxOk":boxOk,
    "memoTimestamps":List<dynamic>.from(memoTimestamps?.map((x) => x.toJson())),
  };

}

class MemoTimestamp {
  String memoTimestamp;
  String memoContentdetail;
  MemoTimestamp({this.memoTimestamp, this.memoContentdetail});
  factory MemoTimestamp.fromJson(Map<String, dynamic> json) => MemoTimestamp(
    memoTimestamp: json["memoTimestamp"] ,
    memoContentdetail: json["memoContentdetail"] ,
  );
  Map<String, dynamic> toJson() =>
      {
        "memoTimestamp": memoTimestamp,
        "memoContentdetail": memoContentdetail,
      };

      
~~~~
~~~~
   Padding(
            padding: const EdgeInsets.symmetric(vertical: 16.0),
            child: RaisedButton(
              onPressed: () {
                  MemoTimestamp memoTimestamp1=new MemoTimestamp();
                  memoTimestamp1.memoTimestamp=dateFormat.format(DateTime.now()).toString();
                  memoTimestamp1.memoContentdetail=memoContent1;
                  Memolist memolist1=new Memolist(
                      memoContent: memoContent1,
                  memolist1.memoTimestamps.add(memoTimestamp1);
                  DBHelper().insertData(memolist1);
                  setState(() {});
                  Navigator.of(context, rootNavigator: true).pop(context);
                }

错误 =>

    E/flutter (30172): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: 
    DatabaseException(java.util.HashMap cannot be cast to java.lang.Integer) 
    sql 'INSERT INTO memolistTable (memoTitle, memoContent, memoId, boxOk, memoTimestamps) 
    VALUES (NULL, ?, NULL, NULL, ?, ?, ?, ?, ?)' 
    args [aa, [{memoContentdetail: aa, memoTimestamp: 2020-07-22 21:59:06}]]}
    E/flutter (30172): #0      wrapDatabaseException (package:sqflite/src/exception_impl.dart:11:7) 
    E/flutter (30172): <asynchronous suspension>
    E/flutter (30172): #1      SqfliteDatabaseFactoryImpl.wrapDatabaseException 
    (package:sqflite/src/factory_impl.dart:78:7)
    E/flutter (30172): #2      SqfliteDatabaseMixin.safeInvokeMethod 
    (package:sqflite_common/src/database_mixin.dart:208:15)
    E/flutter (30172): #3      SqfliteDatabaseMixin.txnRawInsert.<anonymous closure> 
    (package:sqflite_common/src/database_mixin.dart:383:14)

在类 Memolist() 中, 如果只是有一个 String 或 int 变量,它就可以工作 但列表,而不是。 ..................................................... ..................... ..................................................... ......

如何将实例添加到数据库? 或者我在哪里可以找到这样的样本??

【问题讨论】:

    标签: flutter sqflite


    【解决方案1】:

    查看此处的类型限制以及嵌套列表和映射的解决方案:https://github.com/tekartik/sqflite/blob/master/sqflite/doc/supported_types.md

    在您的情况下,一种解决方案是将您的 memoTimestamps 字段 json 编码为 json:

    class Memolist {
      String memoTitle;
      String memoContent;
      int memoId;
      int boxOk; //0:false, 1:true
      List<MemoTimestamp> memoTimestamps;
    
      Memolist(
          {this.memoTitle,
          this.memoContent,
          this.memoId,
          this.boxOk,
          this.memoTimestamps});
    
      factory Memolist.fromJson(Map<String, dynamic> json) {
        var rawMemoTimestamp = json['memoTimestamps'];
    
        return Memolist(
          memoTitle: json['memoTitle'],
          memoContent: json['memoContent'],
          memoId: json['memoId'],
          boxOk: json['boxOk'],
          memoTimestamps: rawMemoTimestamp != null
              ? List<MemoTimestamp>.from((jsonDecode(rawMemoTimestamp) as List)
                  .map((x) => MemoTimestamp.fromJson(x as Map)))
              : null,
        );
      }
    
      Map<String, dynamic> toJson() => <String, dynamic>{
            'memoTitle': memoTitle,
            'memoContent': memoContent,
            'memoId': memoId,
            'boxOk': boxOk,
            'memoTimestamps': memoTimestamps != null
                ? jsonEncode(
                    List<dynamic>.from(memoTimestamps?.map((x) => x.toJson())))
                : null,
          };
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2021-10-12
      • 2019-03-20
      • 2021-11-09
      • 2022-11-04
      • 2021-02-06
      相关资源
      最近更新 更多