Firebase查询哈希映射到类

时间:2016-11-22 08:46:53

标签: java android firebase firebase-realtime-database

我正在使用Firebase,我正在进行一些查询以获取数据,然后我正在使用addChildEventListener我也尝试addValueEventListener来获取结果。 dataSnapshot.getValue()的回复是HashMap

我发现HashMap中的每个键(在第一种情况下)代表我班级中的字段。

有没有更快的方法将HashMap转换为我的班级\型号?或者我必须为每个班级定制吗?。

我在LINK中发现我可以使用dataSnapshot.getValue(Trip.class);但是,它会抛出DataseException

我对反思的经验很少,但理论上我理解我可以使用它,但不知道如何,所以如果可能的话,一个例子会受到赞赏。

感谢。

修改 例如旅行模型(当然不是全部只是为了查看它)

public class Trip implements Model
{
    private String ID;
    private String driverID;

    private LatLng addressFrom;
    private LatLng addressTo;

    private List<LatLng> locationList;

    private boolean isActive;
}

HashMap响应就像这样(在调试时)

result = {HashMap@830043578728}  size = 14
 0 = {HashMap$HashMapEntry@830043579944} "fullAddress" -> "this is the address"
 1 = {HashMap$HashMapEntry@830043579176} "addressFrom" -> " size = 2"
 2 = {HashMap$HashMapEntry@830043581632} "state" -> "0"
 3 = {HashMap$HashMapEntry@830043579552} "distanceMeter" -> "706"
 4 = {HashMap$HashMapEntry@830043580000} "id" -> "-KX5Ihn7E_g8HEmsXXL3"
 5 = {HashMap$HashMapEntry@830043579744} "duration" -> "157"
 6 = {HashMap$HashMapEntry@830043581864} "timeMilliSeconds" -> "1479722067649"
 7 = {HashMap$HashMapEntry@830043579664} "driverID" -> "RZZplHcojGWRoJdRH2SOswQvSBO2"
 8 = {HashMap$HashMapEntry@830043579472} "addressTo" -> " size = 2"
 9 = {HashMap$HashMapEntry@830043581520} "locationList" -> " size = 3"
 10 = {HashMap$HashMapEntry@830043580080} "length" -> "706"
 11 = {HashMap$HashMapEntry@830043578880} "active" -> "false"
 12 = {HashMap$HashMapEntry@830043581576} "passengerCount" -> "1"
 13 = {HashMap$HashMapEntry@830043579800} "endAddressText" -> "this is the end address text"

编辑2 (来自getValue(Trip.lass)的例外

  

com.google.firebase.database.DatabaseException:类com.google.android.gms.maps.model.LatLng缺少没有参数的构造函数

1 个答案:

答案 0 :(得分:3)

我认为错误正在发生,因为某些类如LatLng无法直接存储在Firebase中。通过Google查看this sample app,当位置数据发送到Firebase时,将使用getLatitude()和getLongitude()值而不是LatLng类。因此,如果您使用Lat to Long的HashMaps列表来存储您的位置数据,您可以使用dataSnapshot.getValue(Trip.class)来解析它。