我需要将数据库中存储的某些数据发送到API吗?

时间:2019-08-19 15:31:24

标签: flutter dart sqflite

那是我存储在数据库中的数据

[{计数:3,切碎:0,category_id:3,size_id:63,chops_id:null,cookie_id:null,choole:null,注释:},{count:4,切碎:0,category_id:3, size_id:62,chops_id:null,cookie_id:null,choole:null,注释:},{count:2,切碎:2,category_id:2,size_id:49,chops_id:8,cookie_id:8,choole:2,注释:bzbznzjz}]

以及我需要发送给API的内容

[{“ size_id”:59,“ count”:2,“ category_id”:2,“ chops_id”:null,“ cookie_id”:null,“ choole”:null,“ notes”:“ jgg”,“ minced“:0},{” size_id“:63,” count“:3,” category_id“:2,” chops_id“:4,” cookie_id“:8,” choole“:2,” notes“:” tvv“ ,“切碎”:1}]

我需要将此“”添加到我的密钥中,我该怎么做? 那就是我的代码

import 'dart:async';
import 'dart:io';

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

import 'Models/product.dart';

class DatabaseHelper {
  Product _product;
  static final DatabaseHelper _instance = new DatabaseHelper.internal();

  factory DatabaseHelper() => _instance;

  static Database _db;

  Future<Database> get db async {
    if (_db != null) return _db;
    _db = await initDb();
    return _db;
  }

  DatabaseHelper.internal();

  initDb() async {
   Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, "main.db");
    var theDb = await openDatabase(path, version: 1, onCreate: _onCreate);
    return theDb;
  }

  void _onCreate(Database db, int version) async {
    await db.execute(
        "CREATE TABLE Product(id INTEGER PRIMARY KEY, count INTEGER, minced INTEGER, rate DOUBLE, category_id INTEGER, size_id INTEGER, chops_id INTEGER, cookie_id INTEGER, choole INTEGER, notes TEXT, name TEXT, image TEXT, size_name TEXT, category_name TEXT)");  }

  Future<int> saveProduct(Product product) async {
    var dbProduct = await db;
    int res = await dbProduct.insert("Product", product.toMap());
    print(product.toMap());
    return res;
  }

    Future<List> getAllProduct() async {
      var dbProduct = await db;
      var result = await dbProduct.rawQuery("SELECT * FROM Product");
      return result.toList();
    }
  Future<List> getCartProduct() async {
    var dbProduct = await db;
    var result = await dbProduct.rawQuery("SELECT count, minced, category_id, size_id, chops_id, cookie_id, choole, notes FROM Product");
    return result;
  }


  Future<int> getCount() async {
      var dbProduct = await db;
      return Sqflite.firstIntValue(
          await dbProduct.rawQuery("SELECT COUNT(*) FROM Product"));
    }


    Future<Product> getProduct(int id) async {
      var dbProduct = await db;

      var result = await dbProduct.rawQuery("SELECT * FROM Product WHERE id = $id");
      if (result.length == 0) return null;
      return new Product.fromMap(result.first);
    }


  Future<int> deleteProducts(Product product) async {
    var dbProduct = await db;

    int res = await dbProduct
        .rawDelete('DELETE FROM Product WHERE id = ?', [product.id]);
    return res;
  }

   update(Product product) async {
    var dbProduct = await db;

    int res = await dbProduct.update("Product", product.toMap(),
        where: "id = ?", whereArgs: <int>[product.id]);

    return res > 0 ? true : false;
  }
}

4 个答案:

答案 0 :(得分:1)

兄弟,据我所知,存储在数据库中的数据不在Json字符串中,因此首先需要做的是

  1. 使用正确的格式保存数据,请使用Model类通过使用“ jsonEncode(您的产品列表)”将数据另存为字符串。

将用户视为模型类

HttpClient

每次将数据保存到数据库时,都应使用

  class User {
  final String name;
  final String email;

  User(this.name, this.email);

  User.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        email = json['email'];

  Map<String, dynamic> toJson() =>
    {
      'name': name,
      'email': email,
    };
}

这样,您将在数据库中得到“。”

要将数据取回json,只需在此处传递存储的字符串

String json = jsonEncode(user);

String json = jsonEncode(List<user>);

这将解决您的问题

答案 1 :(得分:0)

只需在数据类中添加toMap方法即可。例如:

class DataClass {
  int id;
  String message;

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'message': message
    }
  }

}

答案 2 :(得分:0)

通过API,我想您的意思是Web API。如果期望使用json(如果这就是“”的意思),则应该jsonEncode SecurityContext您的数据(列表或地图)

答案 3 :(得分:0)

据我所见,您只需要从对象中制作json。在产品类中添加toJson,然后调用它即可。

 int res = await dbProduct.insert("Product", product.toMap());

像这样:

 int res = await dbProduct.insert("Product", product.toJson());

在这种情况下,这是序列化doc总是有帮助的。