[Room] @Query return empty list
Bonsoir,
Je dois réaliser une application mobile en me servant de room pour gérer la base de données. J'ai différentes requêtes asynchrone qui se lance afin de récupérer certaines données sauf que chacune de ses requêtes retourne une liste vide. La base de données n'est pas censé être vide puisque l'insertion de données fonctionnent et autres récupérations également.
Le fragment appelant les services (chacune de ses requêtes retournent une list vide mais je vais exposer une seule de celles ci pour éviter de faire un méga pâté):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
private void getAllData() {
EntrainementSequenceService entrainementSequenceService = new EntrainementSequenceService(getContext());
// Récupération des répétitions *** METHODE EXPOSE ***
entrainementSequenceService.chargerEntrainementSequence(this.entrainement.getId()).observe(this, (List<EntrainementSequence> entrainementSequencesList) -> {
System.out.println(entrainementSequencesList); // Affiche "[]"
this.entrainementSequences.addAll(entrainementSequencesList);
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.entrainementSequences);
// récupération des séquences selon leur ordre
entrainementSequenceService.chargerSequencesEntrainement(this.entrainement.getId()).observe(this, (List<Sequence> sequencesList) -> {
this.sequences.addAll(sequencesList);
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.sequences);
// récupération des cycles
CycleService cycleService = new CycleService(getContext());
for (Sequence sequence: this.sequences) {
cycleService.retrieve(sequence.getCycle()).observe(this, (Cycle cycle) -> {
this.cycles.add(cycle);
});
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.cycles);
// Récupération des travails
TravailService travailService = new TravailService((getContext()));
for (Cycle cycle: this.cycles) {
travailService.retrieve(cycle.getId()).observe( this, (Travail travail) -> {
this.travails.add(travail);
});
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.travails);
} |
Service de la méthode chargerEntrainementSequence():
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
public class EntrainementSequenceService extends GlobalService {
public EntrainementSequenceService(Context context) {
super(context);
}
public LiveData<List<Sequence>> chargerSequencesEntrainement(int entrainementId) {
System.out.println(db.entrainementSequenceDao().chargerSequencesEntrainement(entrainementId));
return db.entrainementSequenceDao().chargerSequencesEntrainement(entrainementId);
}
// *** chargerEntrainementSequence()
public LiveData<List<EntrainementSequence>> chargerEntrainementSequence (int entrainementId) {
return db.entrainementSequenceDao().chargerEntrainementSequence(entrainementId);
}
@SuppressLint("StaticFieldLeak")
public Void insertEntrainementSequence(EntrainementSequence entrainementSequence) {
new AsyncTask<Void, Void, Void>() {
@SuppressLint("NewApi")
@Override
protected Void doInBackground(Void... voids) {
db.entrainementSequenceDao().insertEntrainementSequence(entrainementSequence);
return null;
}
}.execute();
return null;
}
} |
Et la classe DAO de la méthode chargerEntrainementSequence():
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
@Dao
public interface EntrainementSequenceDao {
@Query("SELECT * FROM entrainement_sequence")
List<EntrainementSequence> findAll();
@Query("SELECT * FROM sequence WHERE sequence_id IN (SELECT sequence_id FROM entrainement_sequence WHERE entrainement_id = :entrainementId ORDER BY position_sequence)")
LiveData<List<Sequence>> chargerSequencesEntrainement(int entrainementId);
@Insert
Void insertEntrainementSequence(EntrainementSequence entrainementSequence);
// *** chargerEntrainementSequence()
@Query("SELECT * FROM entrainement_sequence WHERE entrainement_id = :entrainementId ORDER BY position_sequence")
LiveData<List<EntrainementSequence>> chargerEntrainementSequence(int entrainementId);
} |
J'espère avoir était assez clair, je reste dispo pour toutes informations supplémentaires,
merci.