【问题标题】:Hashmap in App Engine Entity classApp Engine 实体类中的哈希图
【发布时间】:2016-06-27 12:27:37
【问题描述】:

我在 App 引擎端点中创建了一个实体,其中 Hashmap 作为一个属性。我正在使用 Objectify 进行持久性。我已经成功地为 android 生成了客户端库。但是当我试图在 android 中使用它时,它不是接受我的 hashmap,而是要求 JsonMap。实体类中是否允许使用 Hashmap?如果是,我应该如何使用云端点访问或保存它。

@Entity
public class MyData {
    @Id
    Long id;
    HashMap<String, Object> userInfo;
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public HashMap<String, Object> getUserInfo() {
        return userInfo;
    }

    public void setUserInfo(HashMap<String, Object> userInfo) {
        this.userInfo = new HashMap<>(userInfo);
    }
}

【问题讨论】:

    标签: java android google-app-engine google-cloud-endpoints objectify


    【解决方案1】:

    通常,您必须在实体类中使用接口“地图”。不同的 API 使用不同类型的实现映射来保存记录。例如,Hibernate 使用“PersistenceMap”。就像您使用的 API 一样,可能会使用不同的地图。但无论如何,最终还是要实现 java.util.Map 接口。因此,您必须使用“地图”接口来声明您的引用。

    【讨论】:

      【解决方案2】:

      如果您的实体包含 HashMap,Objectify 会将 (docs) 保留为 EmbeddedEntity,因此存储它应该不成问题。问题实际上是你如何序​​列化和反序列化你的实体的这个属性。

      您所指的JsonMap 类是什么?什么是“要求它”?您是否将生成的 Android 库用于您的 Cloud Endpoints?

      您可能会发现您需要为端点创建一个custom transformer (@ApiTransform) 以将您的实体序列化为可用于创建JsonMap 的表单。或者您可以将其阅读为 JsonObject 并自行反序列化。这取决于 HashMap 内容的可预测性(它是否有一组已知的键?)。

      【讨论】:

      • 是的,我正在为 android 使用生成的库,而不是 hashmap 的参数,它要求我提供一个 JsonMap 对象。
      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 2013-03-31
      • 2023-01-12
      相关资源
      最近更新 更多