Wpis z mikrobloga

#java #programowanie #androiddev

Cześć!

Mam taki problem (jestem trochę początkujący). Chciałbym sobie z pomocą gsona sparsować jsona do obiektu, następnie ten model/obiekt chciałbym przekazać do powiedzmy bazy danych (realm.io w tym przypadku).

Mam sobie oto takiego jsona: http://api.openweathermap.org/data/2.5/weather?lat=47.73476&lon=-1.5919&units=metric
Parsuję sobie go do takiej klasy i wszystko jest pięknie:

public class CurrentWeather extends RealmObject {

public class Weather {
private int id;
private String main;
private String description;
private String icon;

...gettery settery
}

public class Main {
private double temp;
private double pressure;
private double humidity;
private double temp_min;
private double temp_max;

...gettery settery
}

public class Wind {
private double speed;
private double deg;

...gettery settery
}

public class Clouds {
private long all;

public long getAll() {
return all;
}
}

public class Sys {
private int type;
private long id;
private double message;
private String country;
private long sunrise;
private long sunset;

...gettery settery
}

@Ignore (adnotacje realm, ponieważ nie rozumie zagnieżdżonych klas - trzeba mu sygnalizować żeby je ignorował)
private List weather;
@Ignore
private Main main;
private long visibility;
@Ignore
private Wind wind;
@Ignore
private Clouds clouds;
private long dt;
@Ignore
private Sys sys;
private long id;
private String name;
private int cod;

GETTERY I SETERY...

}

Ale realm.io nie kuma zagnieżdżonych klas, dlatego też muszę w jakiś sposób zdeserializować tego jsona (z pomocą gsona) i odpowiednio zmodyfikować klasę aby oprócz zagnieżdżonych klas miała w swojej strukturze dodatkowo zmienne typu
String weather_max = "wstaw tu Main.getTemp()" czy String pressure = Main.getPressure()....itd na potrzeby realm.io

Ktoś wie jak to sensownie ograć? A może niepotrzebnie się tak przejmuję i powinienem pójść na jakąś łatwiznę?

Ewentualnie czy ktoś zna jakąś ultrałatwą i lekką bazę do androida do której mógłbym wrzucić obiekt z zagnieżdżeniami?

Z góry uprzejmie dziękuję, Krzysztof

P.S.

Dorzucam #naukaprogramowania - może ktoś się zlituje
  • 4
  • Odpowiedz
To co chcesz zrobic nie wyglada na dobre rozwiazanie. Jesli juz musisz uzywac tego realm.io, ktory nie kuma zagniezdzonych klas (hm...) to najlepsza opcja stworzyc od razu obiekt pogody pod niego. Tzn zedytowac od razu JSONowy string ktory pobierasz ( zanim go zdeserializujesz ). Stringa tego wtedy edytujesz tak, aby nie mial obiektu main, ale mial obiekty, ktore ten main zawiera, wtedy de facto tworzysz swoj wlasny response na podstawie tego, jaki
  • Odpowiedz
@janiepaniemaju: nie wiem, czy dobrze zrozumiałem, ale możesz zrobić po dwie klasy, np Clouds i CloudsDTO - pierwszy do trzymania w realm, drugi do deserializaji z jsona i potem przepisać jedne DTO na bazodanowe
  • Odpowiedz
@rex1313: @yelen: @lol_nope: Dziękuję za udzielone odpowiedzi. Nie wiem czy to jest dobre rozwiązanie, ale zrobiłem najbliżej lol_nope, tj. osobną klasę dla gsona (CurrentWeatherGson), w której zawarłem metodę, która serializuje mi te dane i zwraca pojedyńczego (już ładnego i spłaszczoneg) jsona, którego zapisuję w realm jako obiekt CurrentWeather.
  • Odpowiedz