在我的本地SQLite資料庫中,有一個表,它的Class如下:
@Entity(tableName = "table_bp_reading"/span>)
類BPReading(
var systolicValue: Int = 120,
var diastolicValue: Int = 80,
var pulseValue: Int = 72,
var timeStamp: String = getDateTimeStamp(),
@PrimaryKey(autoGenerate = true) var pId: Int = 0
Dao的相關部分看起來是這樣的:
...
資料庫檢查器顯示一個表,其內容為 下列條目。
在資料庫檢查器中運行下面的查詢:
SELECT * FROM table_bp_reading WHERE timeStamp BETWEEN '2021-09-18 00。 00:00' AND '2021-09-18 23:59:59'
。
然而,當我試圖用以下方式來觀察資料時:
bpReadingViewModel. bpReadingsByDate("2021-09-18 00:00:00", "2021-09-18 23:59:59") 。 observe(viewLifecycleOwner, {
bpReading ->。
bpReading.let {
bpReadingsByDate = it
if(it.isNotEmpty() bindDBDataToScatterChart()
}
})
在我這邊沒有顯示任何資料,查詢的結果是一個空串列。
然而,請注意,如果我不使用帶有時間的完整時間戳,而只是使用一個日期字串,例如 "2021-09-18":
bpReadingViewModel. bpReadingsByDate("2021-09-18", "2021-09-18")。observe(viewLifecycleOwner, {
bpReading ->/span>
bpReading.let {
bpReadingsByDate = it
if(it.isNotEmpty() bindDBDataToScatterChart()
}
})
我還將之前給出的Dao的查詢改為以下內容:
fun getReadingsByDateRange(startDate: String, endDate: String)。Flow<List<BPReading>>。
它起作用了,并且按照它的意思回傳該日的3個條目。然而,一旦我改變上述的日期范圍,在2021-09-18和2021-09-19之間進行過濾,它又停止作業了。
請幫助,我對這里發生的事情感到非常困惑。
編輯。 下面是Repository的相關呼叫:
fun readingsByDateRange(s。String, e: String)。Flow<List<BPReading>> =
bpReadingDao.getReadingsByDateRange(e, s)
而從ViewModel中對該類的相關呼叫是:
fun bpReadingsByDate(s。String, e: String)。LiveData<List<BPReading> > =
repository.readingsByDateRange(s, e).asLiveData()
這就是為什么它確實是bpReadingsByDate,而不是getReadingsByDateRane。對不起,這是我的錯誤,我沒有在不同的檔案中對函式的命名保持一致。
uj5u.com熱心網友回復:
查詢沒有問題(經過測驗),從你的評論和編輯的問題來看,你交換了開始和結束的時間戳,這通常會導致沒有東西被選中。
所以你應該把bpReadingDao.getReadingsByDateRange(e, s)改為bpReadingDao.getReadingsByDateRange(s, e)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/327116.html
標籤:
