flutter - 请求多个 API 并在 SQLITE 上存储多个表的最佳方式
问题描述
问题是:如何在 sqlite 上存储?我的意思是如何在 2 个表上存储 2 个 API 数据?
我有多个 API 可以在缓存中获取和存储数据。目前,我一个一个地做,像这样:
按下按钮():
await HelperDatabase1().storeRegister(_url, tokens);
await HelperDatabase1().storeEquipmentReg(_url, tokens);
...
这让我的应用程序变慢了……所以我决定采用@günter-zöchbauer 的方式。(https://stackoverflow.com/a/50028061/9139407)但我不明白如何在 SQLite 上存储多个表。
storeAll()
用过的Future.wait
void storeAll(String url, String token) async {
final urlList = ['$url/nativeapi/v1.0/Register','$url/nativeapi/v1.0/EquipmentReg'];
final responses = await Future.wait(
urlList.map((String url) {
return http.get(url,headers: {'Authorization': 'Bearer $token'});
}),
);
final List<dynamic> caches = responses.map((response) {
print('store All: ${response.body}');
return json.decode(response.body);
}).toList();
}
打印效果很好
以下两种方法用于当前
storeRegister()
方法(获取数据和存储本地)
storeRegister(String url, String token) async {
var db = await db1;
Batch batch = db.batch();
final response = await http.get(
'$url/nativeapi/v1.0/Register',
headers: {'Authorization': 'Bearer $token'},
);
final jsonResponse = json.decode(response.body);
AssetRegister model = AssetRegister.fromJson(jsonResponse);
int length = model.data.length;
for (int i = 0; i < length; i++) {
var data = DataRegister(
i: model.data[i].i,
d: model.data[i].d,
c: model.data[i].c,
u: model.data[i].u,
p: model.data[i].p,
a: model.data[i].a);
batch.insert(
'registerTable',
data.toMap()
);
}
await batch.commit();
}
storeWquipmentReg()
方法
storeEquipmentReg(String url, String token) async {
var db = await db1;
Batch batch = db.batch();
final response = await http.get(
'${url}/nativeapi/v1.0/EquipmentReg',
headers: {'Authorization': 'Bearer ${token}'},
);
final jsonResponse = json.decode(response.body);
Assets model = Assets.fromJson(jsonResponse);
int length = model.data.length;
for (int i = 0; i < length; i++) {
var data = DataEquipmentReg(
i: model.data[i].i,
r: model.data[i].r,
l: model.data[i].l,
t: model.data[i].t,
p: model.data[i].p,
c: model.data[i].c,
u: model.data[i].u,
a: model.data[i].a,
b: model.data[i].b,
eq_no: model.data[i].eq_no,
isH_wit_C: model.data[i].isH_wit_C,
n: model.data[i].n,
);
batch.insert(
'EquipmentRegTable',
data.toMap()
);
}
await batch.commit();
}
解决方案
推荐阅读
- swift - 如何使用 SwiftUI 中的 documentID 删除特定的 Cloud Firestore 文档?
- python - 如何将拉普拉斯算子应用于文件夹中的每个图像
- excel - Excel:如何找到某一行并将该行中的值乘以某个数字?
- python - TemplateSyntaxError: 意外的 '%'
- react-native - React Native Button onPressIn 动画请求
- r - 部分包加载失败
- c++ - 如何监控 TLB 未命中(windows)?
- java - Hibernate 和 EJB:如何正确使用 @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)?
- python - 如何将文本文件中的多值字典作为字典导入 python 以及可能出现的问题。需要回答
- reactjs - 使用 React State Hook,设置多个状态后调用函数