繁体   English   中英

如何在flutter中本地存储json响应(sqflite数据库)

[英]how to store json response locally (sqflite database) in flutter

我无法在 sqflite 数据库中存储来自 API 的 json 响应,但我已经在列表中解析了 json 响应,并且我还在 sqflite 数据库中存储了类似的数据。

为了存储在本地,我获得了成功并能够执行 CRUD 操作并将其发送到服务器,同样我也能够对 API 数据执行 CRUD 操作,但是在本地和 json 数据之间的同步出现问题。

用于调用 json 数据的以下代码 ID

Future<List<Activities>> getData() async {
List<Activities> list;
var res = await http
    .post("http://xxxx/get-activity", headers: {
  HttpHeaders.authorizationHeader: "Bearer " + _token.toString()
});
if (res.statusCode == 200) {
  var data = json.decode(res.body);
  var rest = data["data"] as List;
 // print(rest);
  list = rest.map<Activities>((json) => Activities.fromJson(json)).toList();
 // print('okay, ${rest[0]}!');
} else {
  print('something error');
}
print("List Size: ${list.length}");
return list;

}

您可以参考此文档https://medium.com/flutterdevs/data-persistence-with-sqlite-flutter-47a6f67b973f

GitHub代码https://github.com/ashishrawat2911/flutter_sqlite

CRUD的数据库助手,您可以根据您的请求更改模型

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

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

class PersonDatabaseProvider {
  PersonDatabaseProvider._();

  static final PersonDatabaseProvider db = PersonDatabaseProvider._();
  Database _database;

  Future<Database> get database async {
    if (_database != null) return _database;
    _database = await getDatabaseInstance();
    return _database;
  }

  Future<Database> getDatabaseInstance() async {
    Directory directory = await getApplicationDocumentsDirectory();
    String path = join(directory.path, "person.db");
    return await openDatabase(path, version: 1,
        onCreate: (Database db, int version) async {
      await db.execute("CREATE TABLE Person ("
          "id integer primary key AUTOINCREMENT,"
          "name TEXT,"
          "city TEXT"
          ")");
    });
  }

  addPersonToDatabase(Person person) async {
    final db = await database;
    var raw = await db.insert(
      "Person",
      person.toMap(),
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
    return raw;
  }

  updatePerson(Person person) async {
    final db = await database;
    var response = await db.update("Person", person.toMap(),
        where: "id = ?", whereArgs: [person.id]);
    return response;
  }

  Future<Person> getPersonWithId(int id) async {
    final db = await database;
    var response = await db.query("Person", where: "id = ?", whereArgs: [id]);
    return response.isNotEmpty ? Person.fromMap(response.first) : null;
  }

  Future<List<Person>> getAllPersons() async {
    final db = await database;
    var response = await db.query("Person");
    List<Person> list = response.map((c) => Person.fromMap(c)).toList();
    return list;
  }

  deletePersonWithId(int id) async {
    final db = await database;
    return db.delete("Person", where: "id = ?", whereArgs: [id]);
  }

  deleteAllPersons() async {
    final db = await database;
    db.delete("Person");
  }
}

在此处输入图片说明

解决了

var data = json.decode(res.body);
var activities= data["data"] as List; 
for (var activity in activities) {
 Activity actData = Activity.fromMap(activity);
 batch.insert(actTable, actData.toMap());
} 

解决方案! 请使用这个颤振插件json_store

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM