Везде одна и та же информация, долгое время операции нужно запускать в другом потоке, отличном от потока пользовательского интерфейса, например - работа с базой данных.
... и это правда, если я пытаюсь что-то сохранить в полученную БД:
Невозможно получить доступ к базе данных в главном потоке, так как он может потенциально заблокировать интерфейс на длительный период времени.
Вот мой вопрос, почему я могуполучить все данные из базы данных из пользовательского интерфейса?:)
(в моей базе данных не было .allowMainThreadQueries()
"
Это немного измененный код из документации Google:
ViewModel:
public class LocationsViewModel extends AndroidViewModel {
private LocationRepository locationRepository;
private LiveData<List<LocationModel>> allLocationsLiveData;
public LiveData<List<LocationModel>> getAllLocationsLiveData() {
return allLocationsLiveData;
}
public LocationsViewModel(@NonNull Application application) {
super(application);
locationRepository = new LocationRepository(application);
allLocationsLiveData = locationRepository.getAllLocation();
}
}
Репозиторий:
public class LocationRepository {
private final LocationDao locationDao;
private LiveData<List<LocationModel>> allLocation;
LiveData<List<LocationModel>> getAllLocation() {
return allLocation;
}
LocationRepository(Application application){
LocationsDatabase db = LocationsDatabase.getDatabase(application);
locationDao = db.locationDao();
allLocation = locationDao.getAllLocations();
}
}
метод инициализации из фрагмента:
private void initData() {
locationsViewModel = ViewModelProviders.of(this).get(LocationsViewModel.class);
locationsViewModel.getAllLocationsLiveData().observe(this, new Observer<List<LocationModel>>() {
@Override
public void onChanged(@Nullable List<LocationModel> locations) {
mAdapter.setLocationList(locations);
}
});
}
Дао:
@Dao
public interface LocationDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insert(LocationModel... locations);
@Query("SELECT * FROM LocationModel")
LiveData<List<LocationModel>> getAllLocations();
}
Так почему же я могу получить функцию FromDatabse из пользовательского интерфейса, но мне нужен другой поток для сохранения?