I found that the LiveData returned by Dao will call its observer whenever my Fragment is created, even when the LiveData value is not changed. I have 2 Entity what have a one-to-one relation like this:
public class PetAndTracker {
@Embedded
public Tracker tracker;
@Relation(
parentColumn = "serialNum",
entityColumn = "trackerSerialNum"
)
public Pet pet;
public PetAndTracker() {
}
@Ignore
public PetAndTracker(Tracker tracker) {
this.tracker = tracker;
}
@Ignore
public PetAndTracker(Pet pet) {
this.pet = pet;
}
}
Dao method
@Transaction
@Query("SELECT * From Tracker")
LiveData<List<PetAndTracker>> getPetAndTrackerWithLiveData();
In my Fragment onCreate() method i call the LiveData method like:
appDatabase.petDao()
.getPetAndTrackerWithLiveData()
.observe(this, new Observer<List<PetAndTracker>>() {
@Override
public void onChanged(List<PetAndTracker> list) {
...
}
});
onChanged return the whole PetAndTracker list that is in my database, but I only want that onChanged is trigger when the data really changed or I call an insert/update/delete methods.