У меня есть интерфейс, называемый, например, PlacesDataSource
, для получения списка мест. Он имеет метод, называемый Place getPlaces()
.Использование шаблона объекта доступа к данным с помощью дооснащения
У меня есть два класса, которые реализуют этот интерфейс, который получает места из локальной базы данных, один идет в сети и делает сетевые запросы.
Для реализации на местном уровне у меня есть:
List<Place> getPlaces() {
return mDatabase.getThoseGoodPlaces();
}
Для интернет-реализации, у меня есть:
List<Place> getPlaces() {
Response<List<Place>> response = myOnlineApi.getThoseGoodPlaces().execute(); // synchronous request
return response.body()
}
Однако, это приведет к NetworkOnMainThreadException
. Я могу изменить метод интерфейса на void getPlaces()
, чтобы использовать асинхронный запрос. Но это не выглядит правильным.
Как обычно определить интерфейс, реализовать локальную и онлайн-версию, используя шаблон объекта доступа к данным?
Я не знаю, как заставить его выглядеть правильно, но доступ к db из нити пользовательского интерфейса выглядит неправильно – lelloman