LiveData не показывает данные мгновенно при открытии приложения - PullRequest
1 голос
/ 12 марта 2019

Проблема

Я реализовал библиотеку архитектуры Android, и с этим я восстанавливаю данные из Room Room, используя MVVM (модель-представление представления модели) и всякий раз, когда я использую наблюдатель для просмотра LiveDada при каждом запускеВ приложении наблюдается заметная задержка при загрузке элементов из представления переработчика.

This

Изображение показывает, что я имею в виду, когда статистика приложения и элементы показывают задержку при загрузке.

Что я хочу, чтобы он делал

Чего я хочу добиться с помощью 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
    });

Спасибо за ваше время !!!

1 Ответ

0 голосов
/ 15 марта 2019

Новое обновление: когда я сбрасываю данные приложения, оно загружается нормально, но как только я решаю обновить код, проблема возвращается независимо от того, что я сделал в Android Studio.

...