Ich habe eine Schnittstelle namens PlacesDataSource
, um eine Liste der Orte zu erhalten. Es hat eine Methode namens Place getPlaces()
.Verwenden des Data Access Object Patterns mit Retrofit
Ich habe zwei Klassen, die diese Schnittstelle implementieren, eine, die Plätze von einer lokalen Datenbank bekommt, eine geht online und macht Netzwerkanfragen.
Für die lokale Umsetzung, die ich habe:
List<Place> getPlaces() {
return mDatabase.getThoseGoodPlaces();
}
Für die Online-Umsetzung, die ich habe:
List<Place> getPlaces() {
Response<List<Place>> response = myOnlineApi.getThoseGoodPlaces().execute(); // synchronous request
return response.body()
}
Doch diese NetworkOnMainThreadException
verursachen würde. Ich kann die Interface-Methode zu void getPlaces()
ändern, um eine asynchrone Anforderung zu verwenden. Aber das sieht nicht richtig aus.
Wie definiert man normalerweise die Schnittstelle, implementiert eine lokale und eine Online-Version davon, wenn das Data Access Object-Muster verwendet wird?
Ich weiß nicht, wie man es richtig aussehen lässt, aber der Zugriff auf die db vom UI-Thread sieht auch nicht richtig aus – lelloman