房间数据库查询返回空列表
Room Database Query returning empty list
我正在从事一个使用 Room 数据库存储和检索对象的项目。我已使用 RoomDB、Dao 和 Entity 注释正确设置了所有内容。
当我尝试检索之前保存的对象时,结果得到一个空列表。
这是我检索项目的方法:
class SpotRepository(context: Context) {
private val itemDAO: SpotDAO = RoomDB.getDB(context).spotDao
val allSpotItemsList: List<Spot>
get() = itemDAO.getAllSpotItemsList()
}
这是我的itemDao
@Dao abstract class SpotDAO{
@Query("SELECT * FROM spotItems")
abstract fun getAllSpotItems(): LiveData<List<Spot>>
@Query("SELECT * FROM spotItems")
abstract fun getAllSpotItemsList(): List<Spot>
@Query("SELECT * FROM spotItems WHERE uuid = :id")
abstract fun getSpotById(id: String): Spot
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insertItem(item: Spot): Long
@Query("DELETE FROM spotItems WHERE id = :id")
abstract fun deleteItem(id: Long)
@Update
abstract fun update(item: Spot): Int }
这是我的 RoomDB
@Database(entities = {Spot.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class RoomDB extends RoomDatabase {
private static RoomDB INSTANCE;
private final static Object lock = new Object();
public abstract SpotDAO getSpotDao();
public static RoomDB getDB(Context context){
synchronized (lock){
if(INSTANCE == null){
INSTANCE = Room.databaseBuilder(context, RoomDB.class, "Items.db")
.build();
}
return INSTANCE;
}
}
}
这是我的实体
@Entity(tableName = "spotItems") @JsonIgnoreProperties("photo", "id") class Spot : Serializable{
@PrimaryKey(autoGenerate = true)
var id: Long = 0
@ColumnInfo(name = "hidden")
var hidden = false
@ColumnInfo(name = "address")
var address = ""
@ColumnInfo(name = "uuid")
var uuid = ""
@ColumnInfo(name = "latitude")
var latitude: Double = 0.0
@ColumnInfo(name = "longitude")
var longitude: Double = 0.0
@ColumnInfo(name = "message")
var message = ""
@ColumnInfo(name = "picture_url")
var picture_url = ""
@ColumnInfo(name = "thumb_url")
var thumb_url = ""
@ColumnInfo(name = "comment_count")
var comment_count = 0
@ColumnInfo(name = "poster_uuid")
var poster_uuid = "poster_uuid_place_holder"
@Ignore
var likes = HashMap<String, Boolean>()
@Ignore
var dislikes = HashMap<String, Boolean>()
@ColumnInfo(name = "timestamp")
var timestamp = 0L
// This needs to only get used for reuploading!!!
@ColumnInfo(name = "photo")
var photo: Bitmap? = null
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as Spot
if (uuid != other.uuid) return false
return true
}
override fun hashCode(): Int {
return uuid.hashCode()
}
}
当我尝试使用
访问我保存的项目列表时出现问题
val spotsForReupload = SpotRepository(this@MainActivity).allSpotItemsList
Log.e("NUMBER", spotsForReupload.size.toString())
这里,检索到的项目数总是0
我从中得到的唯一有用提示是控制台中的以下错误日志
E/SQLiteCursor: onMove() return false. RequiredPos: 0 WindowStartPos:
0 WindowRowCount: 0(original count of query: 1)
我不知道这个错误是从哪里来的,我也不知道它是什么意思
为什么我得到一个空列表?谢谢
编辑:我做了一件非常愚蠢的事情。我试图在数据库中以字节数组的形式保存一个 10mb 的位图。不要那样做
我正在从事一个使用 Room 数据库存储和检索对象的项目。我已使用 RoomDB、Dao 和 Entity 注释正确设置了所有内容。
当我尝试检索之前保存的对象时,结果得到一个空列表。
这是我检索项目的方法:
class SpotRepository(context: Context) {
private val itemDAO: SpotDAO = RoomDB.getDB(context).spotDao
val allSpotItemsList: List<Spot>
get() = itemDAO.getAllSpotItemsList()
}
这是我的itemDao
@Dao abstract class SpotDAO{
@Query("SELECT * FROM spotItems")
abstract fun getAllSpotItems(): LiveData<List<Spot>>
@Query("SELECT * FROM spotItems")
abstract fun getAllSpotItemsList(): List<Spot>
@Query("SELECT * FROM spotItems WHERE uuid = :id")
abstract fun getSpotById(id: String): Spot
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insertItem(item: Spot): Long
@Query("DELETE FROM spotItems WHERE id = :id")
abstract fun deleteItem(id: Long)
@Update
abstract fun update(item: Spot): Int }
这是我的 RoomDB
@Database(entities = {Spot.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class RoomDB extends RoomDatabase {
private static RoomDB INSTANCE;
private final static Object lock = new Object();
public abstract SpotDAO getSpotDao();
public static RoomDB getDB(Context context){
synchronized (lock){
if(INSTANCE == null){
INSTANCE = Room.databaseBuilder(context, RoomDB.class, "Items.db")
.build();
}
return INSTANCE;
}
}
}
这是我的实体
@Entity(tableName = "spotItems") @JsonIgnoreProperties("photo", "id") class Spot : Serializable{
@PrimaryKey(autoGenerate = true)
var id: Long = 0
@ColumnInfo(name = "hidden")
var hidden = false
@ColumnInfo(name = "address")
var address = ""
@ColumnInfo(name = "uuid")
var uuid = ""
@ColumnInfo(name = "latitude")
var latitude: Double = 0.0
@ColumnInfo(name = "longitude")
var longitude: Double = 0.0
@ColumnInfo(name = "message")
var message = ""
@ColumnInfo(name = "picture_url")
var picture_url = ""
@ColumnInfo(name = "thumb_url")
var thumb_url = ""
@ColumnInfo(name = "comment_count")
var comment_count = 0
@ColumnInfo(name = "poster_uuid")
var poster_uuid = "poster_uuid_place_holder"
@Ignore
var likes = HashMap<String, Boolean>()
@Ignore
var dislikes = HashMap<String, Boolean>()
@ColumnInfo(name = "timestamp")
var timestamp = 0L
// This needs to only get used for reuploading!!!
@ColumnInfo(name = "photo")
var photo: Bitmap? = null
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as Spot
if (uuid != other.uuid) return false
return true
}
override fun hashCode(): Int {
return uuid.hashCode()
}
}
当我尝试使用
访问我保存的项目列表时出现问题 val spotsForReupload = SpotRepository(this@MainActivity).allSpotItemsList
Log.e("NUMBER", spotsForReupload.size.toString())
这里,检索到的项目数总是0
我从中得到的唯一有用提示是控制台中的以下错误日志
E/SQLiteCursor: onMove() return false. RequiredPos: 0 WindowStartPos: 0 WindowRowCount: 0(original count of query: 1)
我不知道这个错误是从哪里来的,我也不知道它是什么意思
为什么我得到一个空列表?谢谢
编辑:我做了一件非常愚蠢的事情。我试图在数据库中以字节数组的形式保存一个 10mb 的位图。不要那样做