我升级到Firebase 9.0.2。保存到Realtime Database时,我无法像旧版本中那样使用对象进行映射。查看我的sample project demonstrating this。
例如,拿这些对象:
public class Vehicle {
private String vin;
private int wheels;
private int color;
private double price;
private String type;
public Vehicle() { }
....
//public accessors
....
}
和
public class Truck extends Vehicle {
private int bedLength;
private boolean fourWheelDrive;
private boolean diesel;
public Truck() { }
....
//public accessors
....
}
如果我要创建并保存Truck
对象:
final Truck truck = new Truck();
truck.setVin(getRef().push().getKey());
truck.setVehicleType("truck");
truck.setColor(random.color());
truck.setPrice(random.price());
truck.setBedLength(random.number(8));
truck.setDiesel(random.bool());
truck.setFourWheelDrive(random.bool());
truck.setVehicleType(VehicleType.TRUCK);
FirebaseDatabase
.getInstance()
.getReference()
.child(vehicle.getVin())
.setValue(truck);
我只看到来自Truck
的值,而来自Vehicle
的所有值:
"-KKpeYZO4eG3lAYyCd40" : {
"bedLength" : 1,
"diesel" : true,
"fourWheelDrive" : true
}
我正在考虑制作一个JSON映射器,并在每次保存或检索时手动映射我的所有对象(就像以前的Firebase旧版本一样)。如果有更好的解决方案或计划来解决这个问题,我真的很想知道在我开始这个兔子洞之前。
与此同时,我遵循了from this answer的建议,这使得丑陋,冗余和容易出错的代码成为可能。