代码之家  ›  专栏  ›  技术社区  ›  Chris

颤振配置单元使用自定义对象列表保存自定义对象

  •  0
  • Chris  · 技术社区  · 4 年前

    我用的是 Hive -在我的项目中打包以在本地存储一些数据。到目前为止,这一直很有效,但现在我面临一个问题:

    我有一个 Custom-Class 它也有一个和另一个的字段 自定义类 :

    part 'hive_vitals_interface.g.dart';
    
    @HiveType(typeId: 1)
    class HiveVitals extends HiveObject {
      @HiveField(0)
      String? id;
      @HiveField(1)
      DateTime? date;
      @HiveField(2)
      List<HiveDiscomfort> otherDiscomfort;
      @HiveField(3)
      List<HiveDiscomfort> mentalDiscomfort;
    
      HiveVitals({
        this.id,
        this.date,
        this.otherDiscomfort = const [],
        this.mentalDiscomfort = const [],
      });
    }
    

    还有我的 HiveDiscomforts-Class :

    part 'hive_discomfort_interface.g.dart';
    
    @HiveType(typeId: 2)
    class HiveDiscomfort extends HiveObject {
      @HiveField(0)
      String? title;
      @HiveField(1)
      int? intensity;
    
      HiveDiscomfort({
        this.title,
        this.intensity,
      });
    }
    

    我正在努力 拯救 HiveVitals 这样地:

      static Future<void> addVitals(HiveVitals hiveVitals) async {
        final vitalsBox = getVitalsBox();
    
        await vitalsBox.put(hiveVitals.date!.toIso8601String(), hiveVitals);
    
      }
    

    检索 它是这样的:

      static List<HiveVitals> getVitals() {
        Box<HiveVitals> box = getVitalsBox();
        List<HiveVitals> hiveVitals = box.values.toList();
        return hiveVitals;
      }
    

    问题:

    我没有任何错误。事实上,当保存我的对象并在调试器中检查它时,所有内容都已正确保存。然而,当重新启动应用程序时,我的 List<HiveDiscomfort> 田地总是空的!但其余的 蜂群生命 -字段仍然正确保存!?

    我错过了什么?我不明白。。。感谢您的帮助!如果你还需要什么,请告诉我!

    还开了一家 issue 在Github上。

    0 回复  |  直到 4 年前
        1
  •  2
  •   Lakshydeep Vikram Sah    4 年前

    如果你说数据正在保存,并且一切正常,直到你没有重新启动应用程序。所以问题可能是: 重新启动应用程序后,您可能会在应用程序启动后立即启动一个功能,清除存储在Hive中的所有数据。 看看这个。如果这样,那么就删除清除hive DB中所有数据的行或函数。

        2
  •  1
  •   tdy TheChimp    4 年前

    我使用这种方法,它对我来说非常有效 List 不需要注册适配器:

    await Hive.openBox<List>(bookmarks);
    

    添加如下数据:

    boxValue.put(index, [
                        question.title,
                        question.options,
                   ],
    );
    

    你可以通过 ValueListenableBuilder .

        3
  •  0
  •   Mohammad Sami    4 年前

    我认为这是软件包的一个问题,因为我有一个相同的问题,即一切正常,但重启应用程序后,数据消失。所以我在hive Flatter github上问了这个问题,但还没有答案。所以我请你在hive Flatter github上提出一个问题,让他们知道这是我们面临的真正问题。

        4
  •  0
  •   Tommie C.    4 年前

    以下是关于数据丢失原因的几个提示:

    • 蜂巢常见问题解答:如果我的应用程序被杀死,会发生什么?最糟糕的事情就是 如果最后一个条目还没有写完,你就会丢失它。蜂箱 具有内置的完整性检查和崩溃恢复功能,并负责 每件事
    • 限制:键必须是32位无符号整数或带有最大值的ASCII字符串 长度为255个字符。支持的整数值包括所有 介于-2^53和2^53之间的整数,以及一些较大的整数 幅值对象不允许包含周期。蜂巢不会 检测它们并存储将导致无限循环。只有一个 进程可以随时访问一个框。否则坏事就会发生。 框作为文件存储在用户的应用程序目录中。常见违法行为

    不过,最可能的原因可能与不当实施蜂巢关系行为有关。你在用HiveLists吗?如果 多看看这个 closely .其次,当应用程序被禁用时,你可能只是想保存太多。尝试在应用程序被终止之前更改保存操作,以验证行为是否正确。