如何在flutter中将api json数据存储到sqflite中

阿鲁尔

我正在尝试将 api 数据存储在 sqflite 中,但收到“发生异常。_CastError(类型“字符串”不是类型转换中“列表”类型的子类型)”。请帮我解决这个问题。

这是为了获取api数据。(employee_api_provider.dart)

//import 'package:flutter/cupertino.dart';
import 'package:flutter_app/src/models/employee_model.dart';
import 'package:flutter_app/src/providers/db_provider.dart';
import 'package:dio/dio.dart';

class EmployeeApiProvider {
  Future<List<Employee>> getAllEmployees() async {
    var url = "url";
    Response response = await Dio().get(url);
    //debugPrint(response);

    return (response.data as List).map((employee) {
      print('Inserting $employee');
      DBProvider.db.createEmployee(Employee.fromJson(employee));
    }).toList();
  }
}

我已经创建了模型类(employee_model.dart)

 import 'dart:convert';

    List<Employee> employeeFromJson(String str) =>
        List<Employee>.from(json.decode(str).map((x) => Employee.fromJson(x)));

    String employeeToJson(List<Employee> data) =>
        json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

    class Employee {
      int id;
      int eventId;
      String menuName;
      String menuIcon;
      String deepLinkName;
      int displayStatus;
      int orderId;
      String dateTime;

      Employee({
        this.id,
        this.eventId,
        this.menuName,
        this.menuIcon,
        this.deepLinkName,
        this.displayStatus,
        this.orderId,
        this.dateTime,
      });

      factory Employee.fromJson(Map<String, dynamic> json) => Employee(
            id: json["Id"],
            eventId: json["Event_Id"],
            menuName: json["Menu_Name"],
            menuIcon: json["Menu_Icon"],
            deepLinkName: json["Deep_Link_Name"],
            displayStatus: json["Display_Status"],
            orderId: json["Order_Id"],
            dateTime: json["Date_Time"],
          );

      Map<String, dynamic> toJson() => {
            "Id": id,
            "Event_Id": eventId,
            "Menu_Name": menuName,
            "Menu_Icon": menuIcon,
            "Deep_Link_Name": deepLinkName,
            "Display_Status": displayStatus,
            "Order_Id": orderId,
            "Date_Time": dateTime,
          };
    }

db_provider.dart

import 'dart:io';
import 'package:flutter_app/src/models/employee_model.dart';
import 'package:path/path.dart';

import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';

class DBProvider {
  static Database _database;
  static final DBProvider db = DBProvider._();

  DBProvider._();

  Future<Database> get database async {
    // If database exists, return database
    if (_database != null) return _database;

    // If database don't exists, create one
    _database = await initDB();

    return _database;
  }

  // Create the database and the Employee table
  initDB() async {
    Directory documentsDirectory = await getApplicationDocumentsDirectory();
    final path = join(documentsDirectory.path, 'menu.db');

    return await openDatabase(path, version: 1, onOpen: (db) {},
        onCreate: (Database db, int version) async {
      await db.execute('CREATE TABLE Employee('
          'id INTEGER,'
          'eventId INTEGER,'
          'menuName TEXT,'
          'menuIcon TEXT,'
          'deepLinkName TEXT,'
          'displayStatus INTEGER,'
          'orderId INTEGER,'
          'DateTime TEXT'
          ')');
    });
  }

  // Insert employee on database
  createEmployee(Employee newEmployee) async {
    await deleteAllEmployees();
    final db = await database;
    final res = await db.insert('Employee', newEmployee.toJson());

    return res;
  }

  // Delete all employees
  Future<int> deleteAllEmployees() async {
    final db = await database;
    final res = await db.rawDelete('DELETE FROM Employee');

    return res;
  }

  Future<List<Employee>> getAllEmployees() async {
    final db = await database;
    final res = await db.rawQuery("SELECT * FROM EMPLOYEE");

    List<Employee> list =
        res.isNotEmpty ? res.map((c) => Employee.fromJson(c)).toList() : [];

    return list;
  }
}

db_provider.dart

疯狂的懒猫

使用这个 employee_api_provider.dart

return employeeFromJson(response.data).map((employee) {
  print('Inserting $employee');
  DBProvider.db.createEmployee(employee);
}).toList();

代替

return (response.data as List).map((employee) {
  print('Inserting $employee');
  DBProvider.db.createEmployee(Employee.fromJson(employee));
}).toList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在flutter中将api的复杂json响应存储在本地数据库中?

如何在javascript中将数据json存储到cookie中

检索存储在 SQFlite 数据库 (Flutter) 中的数据?

将 SQFlite 中的数据显示到网格列表 (Flutter) 中?

Flutter SQFlite 类到 Json()

将 JSON API 数据存储到 Python 字典中

如何在Flutter中将图像数据保存到sqflite数据库以保持持久性

如何从json接收数据并将其存储到变量中?

如何通过curl get从api中的api将json数据存储到数据库中?

如何在 Flutter 中将 GridView 集成到 TabBar 中?

如何在Flutter中将数据存储为数组在getStringList(Shared Preference)中

如何在其字段中将php多维数组数据存储到数据库中

如何在flutter中显示从API获取的JSON数据?

如何在Rails中将数据存储到数据库

如何在Flutter中从api解析json?

如何在 jQuery DataTable ajax 中将数据发布到 API?

如何将来自JSON API响应的数据存储到ReactJS中的数组中?

如何将 fetch API 请求中的 json 数据存储到全局变量中 - javascript

如何在Simulink中将向量中的数据存储到向量变量中

如何将JSON数据存储和检索到本地存储中?

如何在Flutter中将文件从本地存储导入DB

(更新:如何在sqflite中存储List <String>数据类型)sqflite错误:DatabaseException(java.lang.String无法转换为java.lang.Integer)

如何在Flutter中将枚举绑定到DropdownButton?

如何在Flutter中将PointMode传递到Canvas.drawPoints(..)?

如何在flutter中将语音传递到文本字段?

如何在数据流任务中将列值存储到变量中?

如何在Android中将对象存储到SQLite数据库中?

如何在Postgres中将时间戳数据打包到n分钟的存储桶中

如何在Hortonworks中将火花流数据存储到Hdfs?