我正在使用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缺少没有参数的构造函数
答案 0 :(得分:3)
我认为错误正在发生,因为某些类如LatLng无法直接存储在Firebase中。通过Google查看this sample app,当位置数据发送到Firebase时,将使用getLatitude()和getLongitude()值而不是LatLng类。因此,如果您使用Lat to Long的HashMaps列表来存储您的位置数据,您可以使用dataSnapshot.getValue(Trip.class)来解析它。