Задать вопрос
@dikutenz

Почему не загружаются данные из Room в RecyclerView по запросу?

У меня есть Enity и DAO
@Entity(tableName = GarmentTable.NAME,
foreignKeys = @ForeignKey(entity = GarmentType.class, parentColumns = GarmentTypeTable.Cols.ID, childColumns = GarmentTable.Cols.TYPE))
public class Garment {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = GarmentTable.Cols.ID)
private long mId;

@ColumnInfo(name = GarmentTable.Cols.TITLE)
private String mTitle;

@ColumnInfo(name = GarmentTable.Cols.TYPE, index = true)
private int mTypeId;

//getters setters
}

@Dao
public interface GarmentDao {

@Query("SELECT * FROM " + GarmentTable.NAME)
LiveData> getAll();

@Query("SELECT * FROM " + GarmentTable.NAME + " WHERE :clause")
LiveData> getByClause(String clause);
}

В репозитории у меня есть два метода для получения всех Garment или garment по определенному запросу
public class GarmentRepository {
private GarmentDao mGarmentDao;
private LiveData> mGarments;

GarmentRepository(Application application) {
MyRoomDatabase db = MyRoomDatabase.getDatabase(application);
mGarmentDao = db.garmentDao();
mGarments = mGarmentDao.getAll();
}

public LiveData> getAllGarments() {
return mGarments;
}

public LiveData> getGarments(String whereClause) {
return mGarmentDao.getByClause(whereClause);
}
}

В ViewModel делаю запросы в репозиторий
public class GarmentViewModel extends AndroidViewModel {
private GarmentRepository mRepository;
private LiveData> mGarments;

public GarmentViewModel(Application application) {
super(application);
mRepository = new GarmentRepository(application);
mGarments = mRepository.getAllGarments();
}

public LiveData> getGarments() {
return mGarments;
}

public void setGarments(String whereClause) {
mGarments = mRepository.getGarments(whereClause);
}
}

В RecyclerView добавляю garments
RecyclerView recyclerView = view.findViewById(R.id.recycler_view);

final GarmentListAdapter adapter = new GarmentListAdapter(getActivity());
recyclerView.setAdapter(adapter);

mGarmentViewModel = ViewModelProviders.of(this).get(GarmentViewModel.class);
if(whereClause != null) {
mGarmentViewModel.setGarments(whereClause);
}
mGarmentViewModel.getGarments().observe(this, new Observer>() {
@Override
public void onChanged(@Nullable final List garments) {
adapter.setGarments(garments);
}
});

Вопрос в том, что если я делаю запрос на все garments, то у меня они отображаются, если ввожу какой-нибудь запрос (например whereClause = GarmentTable.Cols.TYPE + " = " + (i + 1); ), то у меня отображается пустой список. Сама программа у меня намного больше, я взял из нее отдельные части, которые относятся именно к этой проблеме. Есть ли какие-нибудь предположения почему так?
  • Вопрос задан
  • 41 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы