У меня есть класс Lure
, который содержит ArrayList
класса LureImage
, как показано в коде ниже.В моем хранилище я делаю вызов базы данных, чтобы получить LiveData<List<Lure>>
, а затем я выполняю AsyncTask
, чтобы получить List<LureImage>
для каждой приманки.Проблема с кодом, который я написал для этого, заключается в том, что он не всегда получает List<LureImage>
из базы данных, и в результате иногда мой RecyclerView показывает изображения, а иногда нет.(я показываю скриншоты того, что я имею в виду ниже)
public class Lure implements Serializable {
private static final String TAG = "LURE";
@PrimaryKey(autoGenerate = true)
private int id;
private String _lureName;
private String _lureNotes;
@Ignore
private List<LureImage> lureImages = new ArrayList<>();
public Lure() {
}
@Ignore
public Lure(String lureName, String lureNotes) {
this._lureName = lureName;
this._lureNotes = lureNotes;
}
}
Из моего класса LureRepository мне удается получить LiveData> из базы данных, а затем я хочу, чтобы каждая приманка получила свой соответствующий класс изображений из базы данных.Мне удалось сделать это, используя этот метод.
public LiveData<List<Lure>> getAllLures() {
LiveData<List<Lure>> luresLiveData = lureDao.getAllLures();
luresLiveData = Transformations.map(luresLiveData, new Function<List<Lure>, List<Lure>>() {
@Override
public List<Lure> apply(List<Lure> input) {
for (final Lure lure : input) {
new GetLureImagesTask(lureDao).execute(lure);
}
return input;
}
});
return luresLiveData;
}
private static class GetLureImagesTask extends AsyncTask<Lure,Void,Void> {
private LureDao lureDao;
public GetLureImagesTask(LureDao lureDao) {
this.lureDao = lureDao;
}
@Override
protected Void doInBackground(Lure... lures) {
lures[0].setLureImages(lureDao.getLureImages(lures[0].getId()));
return null;
}
}
Здесь я получаю изображения и отображаю их в виде переработчика Здесь изображения не получены