在Flutter中,你可以使用sqflite
插件来将JSON响应存储到本地数据库。以下是实现这一功能的基本步骤:
pubspec.yaml
文件中添加sqflite
和path_provider
依赖。dependencies:
flutter:
sdk: flutter
sqflite: ^2.0.0+4
path_provider: ^2.0.2
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = new DatabaseHelper.internal();
factory DatabaseHelper() => _instance;
static Database _database;
Future<Database> get database async {
if (_database != null) return _database;
_database = await initDb();
return _database;
}
DatabaseHelper.internal();
initDb() async {
Directory documentDirectory = await getApplicationDocumentsDirectory();
String path = join(documentDirectory.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 my_table(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
}
}
Future<void> insertData(Map<String, dynamic> row) async {
Database db = await DatabaseHelper().database;
await db.insert("my_table", row);
}
Future<List<Map<String, dynamic>>> getData() async {
Database db = await DatabaseHelper().database;
return await db.query("my_table");
}
问题: 插入数据时出现类型不匹配错误。
原因: 可能是因为JSON中的数据类型与数据库表定义的数据类型不一致。
解决方法: 确保JSON中的数据类型与数据库表中的列类型相匹配。在插入数据前进行类型转换。
Map<String, dynamic> row = {
'name': json['name'].toString(),
'age': int.parse(json['age']),
};
await insertData(row);
假设你有一个JSON响应如下:
{
"name": "John Doe",
"age": 30
}
你可以这样存储到数据库:
void storeJsonResponse(Map<String, dynamic> json) async {
Map<String, dynamic> row = {
'name': json['name'].toString(),
'age': int.parse(json['age']),
};
await insertData(row);
}
然后,你可以这样查询数据:
void fetchData() async {
List<Map<String, dynamic>> rows = await getData();
for (var row in rows) {
print("ID: ${row['id']}, Name: ${row['name']}, Age: ${row['age']}");
}
}
通过以上步骤,你可以在Flutter应用中使用sqflite
插件将JSON响应存储到本地数据库。
领取专属 10元无门槛券
手把手带您无忧上云