当使用firebase(或任何基于id聚合数据的数据库)时,我几乎总是要跟踪给定值的键。例如,假设我有带有纬度和经度字段的Location类。当我从firebase下载if时,除了它的两个字段之外,我还想跟踪密钥(使用push()生成的节点值,例如-K_esEYXNfMBNmgF3fO4)它是从以后下载的,所以我可能稍后更新它,删除它等等。我看到了只有两个解决方案:
复制数据并将键值添加为另一个Location类字段。这不能很好地工作,因为我必须在执行push()之后设置键值。
创建保存密钥和对象的通用包装类:
public class Key<T> {
private final String key;
private final T value;
public Key(String key, T value) {
this.value = value;
this.key = key;
}
public String key() {
return key;
}
public T value() {
return value;
}
}
我正在使用第二种方法,但它看起来不太好。我的所有代码库基本上都有这个Key类,当使用RxJava时,很多方法都有这样的返回类型:Observable<Key<Location>>
,这看起来很荒谬。
答案 0 :(得分:2)
你所谓的荒谬实际上看起来很正常。
或者,您可以在POJO中包含密钥,并使用@Exclude
对其进行注释,以将其从序列化中排除。
答案 1 :(得分:0)