Room RxJava Flowable 在插入后不发出更新

Fer*_*tsu 3 android

我有一项服务,每次找到新位置时都会将数据插入房间数据库。

@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));
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,当我在主活动中订阅时,我没有在数据库中获取新值,它只返回一个空列表一次:

appDataBase.pointDao().getAllByTripId(0)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(points -> Log.d("TripActivity", points.toString()));
Run Code Online (Sandbox Code Playgroud)

这是我的道:

@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);
}
Run Code Online (Sandbox Code Playgroud)

我的实体:

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

房间数据库:

@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();
}
Run Code Online (Sandbox Code Playgroud)

这是我用Dagger注入的数据库构建。

    @Provides
    @Singleton
    public AppDataBase provideAppDataBase(Context context) {
        return Room.databaseBuilder(context, AppDataBase.class, "Trips").build();
    }
Run Code Online (Sandbox Code Playgroud)

我真的不知道我错过了什么。

Fer*_*tsu 6

这是一个匕首问题。我使用了两个不同的 appDataBase 实例,这就是 flowable 对插入没有反应的原因。我觉得自己像个白痴,但希望这可以帮助处于同样情况的其他人。