将备份的JSON数据恢复到Hive

发布于 2025-01-28 02:39:13 字数 2310 浏览 5 评论 0原文

我将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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文