Java 房间没有';t存储数据

Java 房间没有';t存储数据,java,android,sqlite,android-room,Java,Android,Sqlite,Android Room,我的目标是使用Room将一些数据存储到SQLite数据库中 所以我在POJO中创建了很多@Entities 对于每个@实体,我做了一个@Dao,其中至少包含以下查询: @Dao public interface RouteDao { @Query("SELECT * FROM route") LiveData<List<Route>> getAll(); @Insert void insertAll(List<Route> r

我的目标是使用Room将一些数据存储到SQLite数据库中

所以我在POJO中创建了很多@Entities

对于每个
@实体
,我做了一个
@Dao
,其中至少包含以下查询:

@Dao
public interface RouteDao {
    @Query("SELECT * FROM route")
    LiveData<List<Route>> getAll();

    @Insert
    void insertAll(List<Route> routes);

    @Query("DELETE FROM route")
    void deleteAll();
}
当我第一次打开应用程序时,我会用后台IntentService中的数据填充数据库:

public static void importData(Context context, Map<String, String> data) {
        GtfsDatabase db = GtfsDatabase.getDatabase(context);
        db.beginTransaction();
        try {
            db.agencyDao().deleteAll();
            db.calendarDao().deleteAll();
            db.calendarDateDao().deleteAll();
            db.feedInfoDao().deleteAll();
            db.routeDao().deleteAll();
            db.stopDao().deleteAll();
            db.stopTimeDao().deleteAll();
            db.transferDao().deleteAll();
            db.tripDao().deleteAll();

            db.agencyDao().insertAll(rawToAgencies(data.get(AGENCY_FILE)));
            db.calendarDao().insertAll(rawToCalendars(data.get(CALENDAR_FILE)));
            db.calendarDateDao().insertAll(rawToCalendarDates(data.get(CALENDAR_DATES_FILE)));
            db.feedInfoDao().insertAll(rawToFeedInfos(data.get(FEED_INFO_FILE)));
            db.routeDao().insertAll(rawToRoutes(data.get(ROUTES_FILE)));
            db.tripDao().insertAll(rawToTrips(data.get(TRIPS_FILE)));
            db.stopDao().insertAll(rawToStops(data.get(STOPS_FILE)));
            db.stopTimeDao().insertAll(rawToStopsTimes(data.get(STOP_TIMES_FILE)));
            db.transferDao().insertAll(rawToTransfers(data.get(TRANSFERS_FILE)));

            PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(context.getString(R.string.empty), false).apply();
        } finally {
            db.endTransaction();
        }
    }
publicstaticvoidimportdata(上下文、映射数据){
GtfsDatabase db=GtfsDatabase.getDatabase(上下文);
db.beginTransaction();
试一试{
db.agencyDao().deleteAll();
db.calendarDao().deleteAll();
db.calendarDateDao().deleteAll();
db.feedInfoDao().deleteAll();
db.routeDao().deleteAll();
db.stopDao().deleteAll();
db.stopTimeDao().deleteAll();
db.transferDao().deleteAll();
db.tripDao().deleteAll();
db.agencyDao().insertAll(rawToAgencies(data.get(AGENCY_文件));
db.calendarDao().insertAll(rawToCalendars(data.get(CALENDAR_文件));
db.calendardata().insertAll(rawToCalendarDates(data.get(CALENDAR\u DATES\u FILE));
db.feedInfoDao().insertAll(rawToFeedInfos(data.get(提要信息文件));
db.routeDao().insertAll(rawToRoutes(data.get(ROUTES_文件));
db.tripDao().insertAll(rawToTrips(data.get(TRIPS_文件));
db.stopDao().insertAll(rawToStops(data.get(STOPS_FILE));
db.stopTimeDao().insertAll(rawtostoptimes(data.get(STOP_TIMES_FILE));
db.transferDao().insertAll(rawtottransfers(data.get(TRANSFERS_FILE));
PreferenceManager.GetDefaultSharedReferences(context.edit().putBoolean(context.getString(R.string.empty),false).apply();
}最后{
db.endTransaction();
}
}
我绝对相信这些数据是正确的。我调试了每一行,我可以说100%确定我传递给这些函数的对象列表是正确的。完全没有错误

当此服务完成时(
如果(!SharedReferences.getBoolean(getString(R.string.empty),true))
)我尝试在另一个活动中访问数据库,这会显示为空

我检查了这个库
debugCompile'com.amitshekhar.android:debug db:1.0.0'
并且每个表都是空的。

我做错了什么

我知道你看不到我所有的代码,也许有什么地方出错了,所以我真正的问题是:上面的代码正确吗?

解决了

Android Room正在自动处理事务。
@Query
是异步的,而
@Insert
@Delete
是同步的

我的错误是试图在一个事务中包含所有这些操作。 解决办法是:让那个房间自动处理它们

public static void importData(Context context, Map<String, String> data) {
        GtfsDatabase db = GtfsDatabase.getDatabase(context);
        db.agencyDao().deleteAll();
        db.calendarDao().deleteAll();
        db.calendarDateDao().deleteAll();
        db.feedInfoDao().deleteAll();
        db.routeDao().deleteAll();
        db.stopDao().deleteAll();
        db.stopTimeDao().deleteAll();
        db.transferDao().deleteAll();
        db.tripDao().deleteAll();

        db.agencyDao().insertAll(rawToAgencies(data.get(AGENCY_FILE)));
        db.calendarDao().insertAll(rawToCalendars(data.get(CALENDAR_FILE)));
        db.calendarDateDao().insertAll(rawToCalendarDates(data.get(CALENDAR_DATES_FILE)));
        db.feedInfoDao().insertAll(rawToFeedInfos(data.get(FEED_INFO_FILE)));
        db.routeDao().insertAll(rawToRoutes(data.get(ROUTES_FILE)));
        db.tripDao().insertAll(rawToTrips(data.get(TRIPS_FILE)));
        db.stopDao().insertAll(rawToStops(data.get(STOPS_FILE)));
        db.stopTimeDao().insertAll(rawToStopsTimes(data.get(STOP_TIMES_FILE)));
        db.transferDao().insertAll(rawToTransfers(data.get(TRANSFERS_FILE)));

        PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(context.getString(R.string.empty), false).apply();
    }
publicstaticvoidimportdata(上下文、映射数据){
GtfsDatabase db=GtfsDatabase.getDatabase(上下文);
db.agencyDao().deleteAll();
db.calendarDao().deleteAll();
db.calendarDateDao().deleteAll();
db.feedInfoDao().deleteAll();
db.routeDao().deleteAll();
db.stopDao().deleteAll();
db.stopTimeDao().deleteAll();
db.transferDao().deleteAll();
db.tripDao().deleteAll();
db.agencyDao().insertAll(rawToAgencies(data.get(AGENCY_文件));
db.calendarDao().insertAll(rawToCalendars(data.get(CALENDAR_文件));
db.calendardata().insertAll(rawToCalendarDates(data.get(CALENDAR\u DATES\u FILE));
db.feedInfoDao().insertAll(rawToFeedInfos(data.get(提要信息文件));
db.routeDao().insertAll(rawToRoutes(data.get(ROUTES_文件));
db.tripDao().insertAll(rawToTrips(data.get(TRIPS_文件));
db.stopDao().insertAll(rawToStops(data.get(STOPS_FILE));
db.stopTimeDao().insertAll(rawtostoptimes(data.get(STOP_TIMES_FILE));
db.transferDao().insertAll(rawtottransfers(data.get(TRANSFERS_FILE));
PreferenceManager.GetDefaultSharedReferences(context.edit().putBoolean(context.getString(R.string.empty),false).apply();
}

上述代码正确吗?对不起,我不明白。你是在要求整个项目吗?我不明白你不明白的是什么-交易需要承诺。我不知道。。我怎么做?我不记得了。。。检查文档
public static void importData(Context context, Map<String, String> data) {
        GtfsDatabase db = GtfsDatabase.getDatabase(context);
        db.agencyDao().deleteAll();
        db.calendarDao().deleteAll();
        db.calendarDateDao().deleteAll();
        db.feedInfoDao().deleteAll();
        db.routeDao().deleteAll();
        db.stopDao().deleteAll();
        db.stopTimeDao().deleteAll();
        db.transferDao().deleteAll();
        db.tripDao().deleteAll();

        db.agencyDao().insertAll(rawToAgencies(data.get(AGENCY_FILE)));
        db.calendarDao().insertAll(rawToCalendars(data.get(CALENDAR_FILE)));
        db.calendarDateDao().insertAll(rawToCalendarDates(data.get(CALENDAR_DATES_FILE)));
        db.feedInfoDao().insertAll(rawToFeedInfos(data.get(FEED_INFO_FILE)));
        db.routeDao().insertAll(rawToRoutes(data.get(ROUTES_FILE)));
        db.tripDao().insertAll(rawToTrips(data.get(TRIPS_FILE)));
        db.stopDao().insertAll(rawToStops(data.get(STOPS_FILE)));
        db.stopTimeDao().insertAll(rawToStopsTimes(data.get(STOP_TIMES_FILE)));
        db.transferDao().insertAll(rawToTransfers(data.get(TRANSFERS_FILE)));

        PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(context.getString(R.string.empty), false).apply();
    }