Комната RxJava Flowable не испускает обновления после вставки
У меня есть Служба, которая вставляет данные в базу данных Room каждый раз, когда обнаруживается новое местоположение.
@Override
public void onLocationUpdate(Location location) {
final Point point = new Point();
point.setTripId(0);
point.setDate(new Date());
point.setLatitude(location.getLatitude());
point.setLongitude(location.getLongitude());
Completable completable = Completable
.fromAction(() -> appDataBase.pointDao().insert(point));
}
Но по какой-то причине, когда я подписываюсь в основной Activity, я не получаю новые значения в базе данных, он возвращает пустой список только один раз:
appDataBase.pointDao().getAllByTripId(0)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(points -> Log.d("TripActivity", points.toString()));
Вот мой Дао:
@Dao
public interface PointDao {
@Query("SELECT * FROM points WHERE tripId = :tripId")
Flowable<List<Point>> getAllByTripId(int tripId);
@Insert
void insert(Point point);
@Query("DELETE FROM points WHERE tripId = :tripId")
void deleteByTripId(int tripId);
}
Моя сущность:
@Entity(tableName = "points")
public class Point {
public static final int DEFAULT_TRIP_ID = 0;
@PrimaryKey(autoGenerate = true)
private int id;
private int tripId;
private double latitude;
private double longitude;
private Date date;
public Point() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getTripId() {
return tripId;
}
public void setTripId(int tripId) {
this.tripId = tripId;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
RoomDatabase:
@Database(entities = {Point.class, Trip.class}, version = 1, exportSchema = false)
@TypeConverters({Converters.class})
public abstract class AppDataBase extends RoomDatabase {
public abstract TripDao tripDao();
public abstract PointDao pointDao();
}
Это структура базы данных, которую я внедряю с помощью Dagger.
@Provides
@Singleton
public AppDataBase provideAppDataBase(Context context) {
return Room.databaseBuilder(context, AppDataBase.class, "Trips").build();
}
Я действительно не знаю, что мне не хватает.
2 ответа
Это была проблема с кинжалом. Я использовал два разных экземпляра appDataBase, и поэтому переменная не реагировала на вставки. Я чувствую себя идиотом, но надеюсь, что это поможет другим в такой же ситуации.
Completable completable = Completable
.fromAction(() -> appDataBase.pointDao().insert(point));
Вы должны подписаться на ваш комплект, чтобы начать работу.