[英]How to store JSON data into database table in flutter using SQFLite or Moor Library
[英]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.