出行动态本地数据库相关操作基本完成
This commit is contained in:
@@ -9,8 +9,8 @@ import androidx.room.PrimaryKey
|
||||
* @author
|
||||
*/
|
||||
@Entity
|
||||
data class TripRecord(@PrimaryKey(autoGenerate = true)
|
||||
var id: Int = 0,
|
||||
data class TripRecord(@PrimaryKey(autoGenerate = false)
|
||||
var eventType:Int,
|
||||
var canUsed: Boolean = true,
|
||||
var isUsed: Boolean = false,
|
||||
var entity: String? = null,
|
||||
|
||||
@@ -2,20 +2,31 @@ package com.zhidao.mogo.module.event.panel.dao
|
||||
|
||||
import androidx.room.*
|
||||
import com.zhidao.mogo.module.event.panel.bean.TripRecord
|
||||
import io.reactivex.Flowable
|
||||
|
||||
import io.reactivex.Single
|
||||
@Dao
|
||||
interface TripRecordDao {
|
||||
@Query(value = "SELECT * FROM TripRecord")
|
||||
fun getAllTripRecord():Flowable<List<TripRecord>>
|
||||
/**
|
||||
* 查询当日数据
|
||||
* @param limitTime 当日0点的时间戳
|
||||
*/
|
||||
@Query(value = "SELECT * FROM TripRecord WHERE recordTime > :limitTime ORDER BY recordTime DESC")
|
||||
fun getAllTripRecord(limitTime:Long):Single<List<TripRecord>>
|
||||
|
||||
@Insert
|
||||
fun insert(vararg tripRecord: TripRecord)
|
||||
|
||||
@Update
|
||||
fun update(vararg tripRecord: TripRecord)
|
||||
fun update(vararg tripRecord: TripRecord)
|
||||
|
||||
@Delete
|
||||
fun delete(vararg tripRecord: TripRecord)
|
||||
fun delete(vararg tripRecord: TripRecord)
|
||||
|
||||
/**
|
||||
* 删除超时的数据,即当天0时以前的数据
|
||||
* 虽然注解是Query,但是目的是执行后面的sql语句,所以就不要在意这些细节了
|
||||
*
|
||||
* @param limitTime 当日0点的时间戳
|
||||
*/
|
||||
@Query(value = "DELETE FROM TripRecord WHERE recordTime < :limitTime")
|
||||
fun deleteOvertimeTripRecord(limitTime: Long)
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package com.zhidao.mogo.module.event.panel.fragment
|
||||
|
||||
import android.util.Log
|
||||
import com.mogo.commons.mvp.MvpFragment
|
||||
import com.mogo.utils.logger.Logger
|
||||
import com.zhidao.mogo.module.event.panel.EventPanelConstants.MODULE_NAME
|
||||
import com.zhidao.mogo.module.event.panel.R
|
||||
import com.zhidao.mogo.module.event.panel.bean.TripRecord
|
||||
import com.zhidao.mogo.module.event.panel.presenter.TripRecordPresenter
|
||||
@@ -18,7 +20,8 @@ class TripRecordFragment: MvpFragment<TripRecordFragment, TripRecordPresenter>()
|
||||
|
||||
override fun initViews() {
|
||||
btnInsert.setOnClickListener {
|
||||
val tripRecord = TripRecord()
|
||||
val randomType = Random.nextInt(10000)
|
||||
val tripRecord = TripRecord(randomType)
|
||||
val random = Random.nextInt(10)
|
||||
tripRecord.entity = "entity: $random"
|
||||
tripRecord.recordTime = System.currentTimeMillis()
|
||||
@@ -47,9 +50,13 @@ class TripRecordFragment: MvpFragment<TripRecordFragment, TripRecordPresenter>()
|
||||
Log.d(TAG, "local list: $tripRecordList")
|
||||
mPresenter.queryAllTripRecord()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
override fun createPresenter(): TripRecordPresenter = TripRecordPresenter(this)
|
||||
|
||||
fun refreshTripRecord(tripRecords: List<TripRecord>) {
|
||||
Logger.d(MODULE_NAME, "刷新出行动态:$tripRecords")
|
||||
tripRecordList.clear()
|
||||
tripRecordList.addAll(tripRecords)
|
||||
}
|
||||
}
|
||||
@@ -1,36 +1,71 @@
|
||||
package com.zhidao.mogo.module.event.panel.presenter
|
||||
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import com.mogo.commons.mvp.Presenter
|
||||
import com.mogo.utils.ThreadPoolService
|
||||
import com.mogo.utils.logger.Logger
|
||||
import com.zhidao.mogo.module.event.panel.EventPanelConstants.MODULE_NAME
|
||||
import com.zhidao.mogo.module.event.panel.bean.TripRecord
|
||||
import com.zhidao.mogo.module.event.panel.dao.TripRecordDatabase
|
||||
import com.zhidao.mogo.module.event.panel.fragment.TripRecordFragment
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import kotlin.concurrent.thread
|
||||
import java.util.*
|
||||
|
||||
class TripRecordPresenter(view: TripRecordFragment) : Presenter<TripRecordFragment>(view) {
|
||||
var queryDisposable:Disposable? = null
|
||||
fun queryAllTripRecord() {
|
||||
val disposable = TripRecordDatabase.getInstance(context).getTripRecordDao().getAllTripRecord().subscribeOn(Schedulers.io()).subscribe {
|
||||
Log.d("TripRecordFragment", "db query: $it")
|
||||
queryDisposable = TripRecordDatabase.getInstance(context).getTripRecordDao().getAllTripRecord(countLimitTime()).subscribeOn(Schedulers.io()).observeOn(Schedulers.io()).map {
|
||||
Logger.d(MODULE_NAME,"delete over time record when query thread is ${Thread.currentThread().name}")
|
||||
TripRecordDatabase.getInstance(context).getTripRecordDao().deleteOvertimeTripRecord(countLimitTime())
|
||||
it
|
||||
}.observeOn(AndroidSchedulers.mainThread()).subscribe {it->
|
||||
Log.d(MODULE_NAME, "db query: $it, thread is ${Thread.currentThread().name}")
|
||||
mView.refreshTripRecord(it)
|
||||
}
|
||||
}
|
||||
|
||||
fun insertTripRecord(vararg records: TripRecord) {
|
||||
fun insertTripRecord(vararg records: TripRecord) {
|
||||
ThreadPoolService.execute {
|
||||
TripRecordDatabase.getInstance(context).getTripRecordDao().insert(*records)
|
||||
// 为了防止只进不出,所以在插入新数据时,进行过期数据删除操作
|
||||
Logger.d(MODULE_NAME,"delete over time record when insert")
|
||||
TripRecordDatabase.getInstance(context).getTripRecordDao().deleteOvertimeTripRecord(countLimitTime())
|
||||
}
|
||||
}
|
||||
|
||||
fun updateTripRecords(vararg records: TripRecord) {
|
||||
fun updateTripRecords(vararg records: TripRecord) {
|
||||
ThreadPoolService.execute {
|
||||
TripRecordDatabase.getInstance(context).getTripRecordDao().update(*records)
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteTripRecords(vararg records: TripRecord) {
|
||||
fun deleteTripRecords(vararg records: TripRecord) {
|
||||
ThreadPoolService.execute {
|
||||
TripRecordDatabase.getInstance(context).getTripRecordDao().delete(*records)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算约束时间,即当日0时
|
||||
*/
|
||||
private fun countLimitTime():Long{
|
||||
val calendar = Calendar.getInstance()
|
||||
calendar.time = Date()
|
||||
calendar.set(Calendar.HOUR_OF_DAY,0)
|
||||
calendar.set(Calendar.MINUTE,0)
|
||||
calendar.set(Calendar.SECOND,0)
|
||||
return calendar.timeInMillis
|
||||
}
|
||||
|
||||
override fun onDestroy(owner: LifecycleOwner) {
|
||||
super.onDestroy(owner)
|
||||
queryDisposable?.let {
|
||||
if (!it.isDisposed) {
|
||||
it.dispose()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/clPanelContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone">
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTitle"
|
||||
@@ -12,7 +11,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:text="Trip Record"
|
||||
android:textColor="#fff"
|
||||
android:textColor="#000"
|
||||
android:textSize="40sp" />
|
||||
|
||||
<Button
|
||||
@@ -20,18 +19,18 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Insert"
|
||||
android:textColor="#fff"
|
||||
android:textColor="#000"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@+id/btnUpdate"/>
|
||||
app:layout_constraintRight_toLeftOf="@+id/btnUpdate"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnUpdate"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Update"
|
||||
android:textColor="#fff"
|
||||
android:textColor="#000"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintLeft_toRightOf="@+id/btnInsert"
|
||||
app:layout_constraintRight_toLeftOf="@+id/btnDelete"
|
||||
@@ -42,7 +41,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Delete"
|
||||
android:textColor="#fff"
|
||||
android:textColor="#000"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintLeft_toRightOf="@+id/btnUpdate"
|
||||
app:layout_constraintRight_toLeftOf="@+id/btnQuery"
|
||||
@@ -53,10 +52,22 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Query"
|
||||
android:textColor="#fff"
|
||||
android:textColor="#000"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintLeft_toRightOf="@+id/btnDelete"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnGenerate"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="GenerateLimitTime"
|
||||
android:textColor="#000"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnInsert" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
Reference in New Issue
Block a user