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 java : Sélectionner tout - Visualiser dans une fenêtre à part
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 java : Sélectionner tout - Visualiser dans une fenêtre à part
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 java : Sélectionner tout - Visualiser dans une fenêtre à part
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.