Przepraszam, jeśli nie jestem super jasne z wyjaśnieniami, ale dodam i edytuję to pytanie dla jasności na żądanie.Konwertuj ForeignCollection na ArrayList - ORMLite, Gson i Android
Pracuję nad aplikacją dla systemu Android, która odbiera dane za pośrednictwem zewnętrznego interfejsu API i przechowuje dane lokalnie za pomocą interfejsu ORMLite. Przed przechowywanie danych lokalnie i przy użyciu ORMLite miałem modele, które pobrane JSON z serwera i przetwarzane go poprzez:
Gson gson = new Gson();
String result = ApiClient.httpPost("/user_route");
User user = gson.fromJson(result, User.class);
Klasa użytkownika został określony
public class User {
int id;
String name;
ArrayList<Image> media;
}
a klasa Obrazu:
public class Image {
int id;
int creator_id;
String url;
}
To jest uproszczona reprezentacja modeli i metod, ale uważam, że zachowałem wszystkie istotne informacje. BTW, media
jest obiektem JSON, który zawiera Images
.
Teraz próbuję również przechowywać dane lokalnie. Aby uzyskać relacje między użytkownikami a obrazami za pomocą ORMLite, wydaje się, że musisz użyć klasy ForeignCollection i adnotacji @ForeignCollectionField. Nie wierzę, że Gson może bezpośrednio analizować Json dla pola media
w klasie User jako obiekt ForeignCollection, więc pomyślałem, że muszę utworzyć dwa pola mediaCollection
i media
.
Korzystanie ORMLite klasy User teraz wygląda tak:
@DatabaseTable(tableName = "Users")
public class User {
@DatabaseField(generatedId = true)
int id;
@DatabaseField
String name;
@ForeignCollectionField
ForeignCollection<Image> mediaCollection;
ArrayList<Image> media;
}
Klasa Obraz z ORMLite wygląda następująco:
@DatabaseTable(tableName = "Images")
public class Image {
@DatabaseField(generatedId = true)
int id;
@DatabaseField(foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
private User user;
@DatabaseField
int creator_id;
@DatabaseField
String url;
}
Jak przepływ aplikacji działa to pierwszy hit lokalny baza danych dla użytkownika. Wykonuję logikę, która następnie określa, czy muszę rzeczywiście trafić serwer, aby "zaktualizować" lub "odświeżyć" dane użytkownika.
Niezależnie od tego, czy dane są przesyłane lokalnie, czy z serwera zdalnego, muszę wyświetlić w tym samym widoku widok Image
. W obecnej wersji adres URL urządzenia Image
jest przechowywany w różnych typach obiektów w zależności od tego, czy dane są lokalne czy zdalne. Chciałbym to zrobić, jeśli Image
jest przechowywany w obiekcie ForeginCollection
, przekonwertować ten obiekt na ArrayList
, a następnie kontynuować z resztą kodu, który wyodrębnia adres URL Image
i wyświetla go.
Zgaduję, że są dwa pytania.
Czy to dobry plan, czy powinienem napisać dwa całkowicie odrębne sposoby wydobywania
Image
URL z danymi, nie przekształcając obiekt zForeignCollection
doArrayList
?Jeśli jest dobry plan, w jaki sposób mogę przekonwertować
ForeginCollection
doArrayList
?
zobacz odpowiedź w innym wątku pokrewnym: http://stackoverflow.com/a/31598771/3495371 –