Проблема
Я реализовал библиотеку архитектуры Android, и с этим я восстанавливаю данные из Room Room, используя MVVM (модель-представление представления модели) и всякий раз, когда я использую наблюдатель для просмотра LiveDada при каждом запускеВ приложении наблюдается заметная задержка при загрузке элементов из представления переработчика.
Изображение показывает, что я имею в виду, когда статистика приложения и элементы показывают задержку при загрузке.
Что я хочу, чтобы он делал
Чего я хочу добиться с помощью LiveData, это это , и способ, которым я смог добиться этого, в моем Дао, я использовал Queryчтобы получить все данные и передать их в виде списка, а не использовать LiveData, а затем в репозитории преобразовать их в MutableLiveData, а затем передать их в базу данных и оттуда наблюдать как LiveData в моем фрагменте, но использование этого подхода фактически не обновляетпри удалении или при вставке, если только я перезапущу приложение.
Есть ли способ исправить эту проблему?
Я бы очень хотел использовать LiveData.
Это мой интерфейс DevicesDao:
@Dao
public interface DevicesDao {
@Insert
void insert(Devices... devices);
@Query("SELECT * FROM devices")
LiveData<List<Devices>> getDevices();
/*
@Query("SELECT * FROM devices")
List<Devices> getDevices();
*/
@Delete
void delete(Devices... device);
@Update
void update(Devices... device);
}
База данных:
@Database(entities = {Devices.class}, version = 1)
public abstract class DevicesDatabase extends RoomDatabase {
private static final String DATABASE_NAME = "devices_registered";
private static DevicesDatabase instance;
public abstract DevicesDao devicesDao();
public static DevicesDatabase getInstance(final Context context) {
if (instance == null) {
synchronized (DevicesDatabase.class) {
if (instance == null) {
instance = Room.databaseBuilder(
context.getApplicationContext(),
DevicesDatabase.class,
DATABASE_NAME)
.fallbackToDestructiveMigration()
.build();
}
}
}
return instance;
}
}
Репозиторий:
public class DevicesRepository {
private final DevicesDao devicesDao;
public DevicesRepository(Application application) {
DevicesDatabase db = DevicesDatabase.getInstance(application);
devicesDao = db.devicesDao();
}
public void addDevices(Devices devices) {
new InsertDeviceAsync(devicesDao).execute(devices);
}
public void updateDevice(Devices devices) {
new UpdateDeviceAsync(devicesDao).execute(devices);
}
public void deleteDevice(Devices devices) {
new DeleteDeviceAsync(devicesDao).execute(devices);
}
//Gets all data from SQLite
public LiveData<List<Devices>> getAllDevices() {
return devicesDao.getDevices();
}
/*
public LiveData<List<Devices>> getAllDevices() {
MutableLiveData<List<Devices>> devices = new MutableLiveData<>();
try {
devices.setValue(new GetDeviceAsync(devicesDao).execute().get());
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return devices;
}
*/
}
Просмотр файла модели:
public class HomeFragmentViewModel extends AndroidViewModel {
private final DevicesRepository devicesRepository;
private LiveData<List<Devices>> devices;
public HomeFragmentViewModel(@NotNull Application application) {
super(application);
devicesRepository = new DevicesRepository(application);
devices = devicesRepository.getAllDevices();
}
public LiveData<List<Devices>> getAllDevices() {
return devices;
}
public void addNewDevice(Devices devices) {
devicesRepository.addDevices(devices);
}
public void deleteDevice(Devices devices) {
devicesRepository.deleteDevice(devices);
}
public void editDevice(Devices devices) {
devicesRepository.updateDevice(devices);
}
}
И наконец, наблюдатель в моем фрагменте:
///////Other code
//Implements ViewModel to HomeFragment
homeFragmentViewModel = ViewModelProviders.of(this).get(HomeFragmentViewModel.class);
homeFragmentViewModel.getAllDevices().observe(getViewLifecycleOwner(), devicesList -> {
//Validation tool
validationUtil = new ValidationUtil(devicesList);
//Adds to adapter
adapter.submitList(devicesList);
/////// Other code
});
Спасибо за ваше время !!!