私は2つのモデル(テーブル)、WordGroups
とWords
を持っており、それらの間の関係は1対多です。 だから私のモデルなどDao
外観:Androidの部屋:LiveDataとの関係
public LiveData<WordGroup> getWordGroupWithWords(int id) {
LiveData<WordGroup> wordGroupLiveData = dao.selectWordGroupById(id);
LiveData<WordGroup> wordGroupWithWordsLiveData = Transformations.switchMap(wordGroupLiveData, inputWordGroup -> {
LiveData<List<Word>> wordsLiveData = dao.selectWordsByWordGroupId(inputWordGroup.getId());
LiveData<WordGroup> outputWordGroupsLiveData = Transformations.map(wordsLiveData, inputWords -> {
inputWordGroup.setWords(inputWords);
return inputWordGroup;
});
return outputWordGroupsLiveData;
});
return wordGroupWithWordsLiveData;
}
:
@Entity
public class WordGroup {
@PrimaryKey
private int id;
@Ignore
private List<Word> words;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Word> getWords() {
return words;
}
public void setWords(List<Word> words) {
this.words = words;
}
}
@Entity
public class Word {
@PrimaryKey
private int id;
@ForeignKey(entity = WordGroup.class, parentColumns = "id", childColumns = "wordGroupId")
private int wordGroupId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getWordGroupId() {
return wordGroupId;
}
public void setWordGroupId(int wordGroupId) {
this.wordGroupId = wordGroupId;
}
}
と
@Dao
public interface Dao {
@Query("select * from WordGroup where id = :id")
LiveData<WordGroup> selectWordGroupById(int id);
@Query("select * from WordGroup")
LiveData<List<WordGroup>> selectAllWordGroups();
@Query("select * from Word where wordGroupId = :wordGroupId")
LiveData<List<Word>> selectWordsByWordGroupId(int wordGroupId);
}
は、今私はWordGroup
を選択してもTransformations
を使用して、そのWord
秒を設定する方法を持っています私はWordGroup
のすべてを選択する方法を書いて、各WordGroup
の場合はです。まあ、私は少しを試してみましたが、私はMediatorLiveData
の助けを借りて、この解決策を考え出した
public LiveData<List<WordGroup>> getAllWordGroupsWithWords();
この記事をチェックしてくださいhttps://medium.com/@rezabigdeli6/android-room-handling-relations-using-livedata-2d892e40bd53 –