Комната 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));

Вы должны подписаться на ваш комплект, чтобы начать работу.

Другие вопросы по тегам