2016-11-22 2 views
0

Я использую Firebase, и я делаю запрос, чтобы получить данные, а затем я использую addChildEventListener. Я также пробовал addValueEventListener, чтобы получить результат. Ответ от dataSnapshot.getValue() - HashMap.Firebase query hashmap для класса

Я обнаружил, что каждый ключ в этом HashMap (в первом случае) представляет собой поле в моем классе.

Есть ли более быстрый способ преобразования этого HashMap в мой класс \ модель? Или мне нужно сделать это для каждого класса, который у меня есть?

Я нашел в LINK, что я могу использовать dataSnapshot.getValue(Trip.class);, однако он выбрасывает DataseException.

Мой опыт с отражением очень мало, но я понимаю, что теоретически могу его использовать, но не уверен, как, так что, если возможно, пример будет оценен.

Спасибо.

EDIT модель Trip, например (не все это, конечно, только для его просмотра)

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 = {[email protected]} size = 14 
0 = {[email protected]} "fullAddress" -> "this is the address" 
1 = {[email protected]} "addressFrom" -> " size = 2" 
2 = {[email protected]} "state" -> "0" 
3 = {[email protected]} "distanceMeter" -> "706" 
4 = {[email protected]} "id" -> "-KX5Ihn7E_g8HEmsXXL3" 
5 = {[email protected]} "duration" -> "157" 
6 = {[email protected]} "timeMilliSeconds" -> "1479722067649" 
7 = {[email protected]} "driverID" -> "RZZplHcojGWRoJdRH2SOswQvSBO2" 
8 = {[email protected]} "addressTo" -> " size = 2" 
9 = {[email protected]} "locationList" -> " size = 3" 
10 = {[email protected]} "length" -> "706" 
11 = {[email protected]} "active" -> "false" 
12 = {[email protected]} "passengerCount" -> "1" 
13 = {[email protected]} "endAddressText" -> "this is the end address text" 

EDIT 2 (исключение из getValue (Trip.lass)

com.google.firebase.database.DatabaseException: Класс com.google.android.gms.maps.model.LatLng отсутствует конструктор без аргументов

+0

Можете ли вы опубликовать свою модель класса и hashmap ответа? – rhari

+0

@rhari, пожалуйста, проверьте изменение –

+0

Можете ли вы также опубликовать исключение, которое вы получаете в logcat при использовании dataSnapshot.getValue (Trip.class); ? – rhari

ответ

2

Я думаю, что ошибка происходит потому, что некоторые классы как LatLng нельзя хранить непосредственно в Firebase. Глядя на this sample app на google, когда данные местоположения отправляются в Firebase, вместо класса LatLng используются значения getLatitude() и getLongitude(). Поэтому, если вы используете что-то вроде List of HashMaps от Lat до Long для хранения ваших данных о местоположении, вы можете использовать dataSnapshot.getValue (Trip.class) для его анализа.

+0

спасибо. похоже, это была моя проблема, я создал другой класс, похожий на 'LatLng', но с конструктором без параметров и использовал его. Теперь это работает. –

Смежные вопросы