将备份的JSON数据恢复到Hive
我将Hive数据备份到JSON文件中,现在我想将该备份还原到Hive数据库,但我不知道如何。
有解决方案吗?
This is my model class
@HiveType(typeId: 1)
class Medicines extends HiveObject{
Medicines( this.name);
@HiveField(0)
late String name;
Map<String, dynamic> toJson() => {
'Name': name,
};
Medicines.fromJson(Map<String, dynamic> json) {
json["Name"] as String;
}
}
and I use this method for backup the data.
Future<void> createBackupMedicins(String? pather) async {
if (Hive.box<Medicines>("medicine").isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('No medicin Stored.')),
);
return;
}
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Creating backup...')),
);
Map<String, dynamic> map = Hive.box<Medicines>("medicine")
.toMap()
.map((key, value) => MapEntry(key.toString(), value));
String json = jsonEncode(map);
// Directory dir = await _getDirectory();
String formattedDate = DateTime.now()
.toString()
.replaceAll('.', '-')
.replaceAll(' ', '-')
.replaceAll(':', '-');
String path = '${pather}/Medicins $formattedDate.json';
File backupFile = File(path);
await backupFile.writeAsString(json);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text("Backup saved in folder External Data")),
);
}
我看到了这种恢复的方法,但我不知道(FromJson)方法是如何编写的。
Future<void> restoreBackup() async {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Restoring backup...')),
);
FilePickerResult? file = await FilePicker.platform.pickFiles(
type: FileType.any,
);
if (file != null) {
File files = File(file.files.single.path.toString());
Hive.box<Medicines>('Medicine').clear();
Map<String, dynamic> map = jsonDecode(await files.readAsString());
for (var i = 0; i < map.length; i++) {
Password Medicine= medicine.fromJson(i.toString(), map);
Hive.box<Medicines>('Medicine').add(Medicine);
}
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Restored Successfully...')),
);}
}
I backup the hive data to a json file, and now I want to restore that backup to the hive database, but I don't know how.
Is there any solution?
This is my model class
@HiveType(typeId: 1)
class Medicines extends HiveObject{
Medicines( this.name);
@HiveField(0)
late String name;
Map<String, dynamic> toJson() => {
'Name': name,
};
Medicines.fromJson(Map<String, dynamic> json) {
json["Name"] as String;
}
}
and I use this method for backup the data.
Future<void> createBackupMedicins(String? pather) async {
if (Hive.box<Medicines>("medicine").isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('No medicin Stored.')),
);
return;
}
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Creating backup...')),
);
Map<String, dynamic> map = Hive.box<Medicines>("medicine")
.toMap()
.map((key, value) => MapEntry(key.toString(), value));
String json = jsonEncode(map);
// Directory dir = await _getDirectory();
String formattedDate = DateTime.now()
.toString()
.replaceAll('.', '-')
.replaceAll(' ', '-')
.replaceAll(':', '-');
String path = '${pather}/Medicins $formattedDate.json';
File backupFile = File(path);
await backupFile.writeAsString(json);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text("Backup saved in folder External Data")),
);
}
I see this method for restoring but I don't know how the (FROMJSON) method has been written.
Future<void> restoreBackup() async {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Restoring backup...')),
);
FilePickerResult? file = await FilePicker.platform.pickFiles(
type: FileType.any,
);
if (file != null) {
File files = File(file.files.single.path.toString());
Hive.box<Medicines>('Medicine').clear();
Map<String, dynamic> map = jsonDecode(await files.readAsString());
for (var i = 0; i < map.length; i++) {
Password Medicine= medicine.fromJson(i.toString(), map);
Hive.box<Medicines>('Medicine').add(Medicine);
}
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Restored Successfully...')),
);}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论