Java 房间没有';t存储数据
我的目标是使用Room将一些数据存储到SQLite数据库中 所以我在POJO中创建了很多@Entities 对于每个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
@实体
,我做了一个@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();
}