После вызова mDataSource.invalidate () метод mDataSource будет признан недействительным, а новый экземпляр DataSource будет создан с помощью метода DataSource.Factory.create (), поэтому важно, чтобы предоставил новый DataSource () каждый раз внутри метода DataSource.Factory.create () не предоставляйте один и тот же экземпляр DataSource каждый раз .
mDataSource.invalidate () не работает, , потому что после аннулирования CouponListDataSourceFactory предоставляет тот же, уже недействительный экземпляр DataSource.
После модификации CouponListDataSourceFactory будет выглядеть так, как показано ниже в примере, и вызов метода mCouponListDataSourceFactory.dataSource.invalidate () сделает обновление , или вместо сохранения экземпляра dataSource внутри фабрика, мы можем вызвать метод invalidate для LiveData > .getValue (). getDataSource (). invalidate ()
public class CouponListDataSourceFactory extends DataSource.Factory {
private CouponListDataSource dataSource;
private CouponRepository repository;
private String token;
private String vendorId;
public CouponListDataSourceFactory(CouponRepository repository, String token, String vendorId) {
this.repository = repository;
this.token = token;
this.vendorId = vendorId;
}
@Override
public DataSource create() {
dataSource = new CouponListDataSource(repository, token, vendorId);
return dataSource;
}
}