Java 返回过时数据的领域
我没有很多编写Android应用程序的经验。为了好玩,我正在编写一个应用程序,将我的通话记录上传到我的服务器上。整个应用程序正在作为服务运行。该服务(在手机启动时启动)注册ContentObserver,然后调用我的自定义Java 返回过时数据的领域,java,android,database,realm,kotlin,Java,Android,Database,Realm,Kotlin,我没有很多编写Android应用程序的经验。为了好玩,我正在编写一个应用程序,将我的通话记录上传到我的服务器上。整个应用程序正在作为服务运行。该服务(在手机启动时启动)注册ContentObserver,然后调用我的自定义CallLog类。我使用ContentObserver监听内容更改事件。不幸的是,当例如拨一个号码时,ContentObserver会被调用多次 出于这个原因,我有一个函数,在成功上传(我使用改型)后调用它,名为markAsUploaded()。此函数创建一个名为calllog
CallLog
类。我使用ContentObserver
监听内容更改事件。不幸的是,当例如拨一个号码时,ContentObserver会被调用多次
出于这个原因,我有一个函数,在成功上传(我使用改型)后调用它,名为markAsUploaded()
。此函数创建一个名为calllogupload
的RealmObject
(与我的常规CallLog
模型不同)。此calllogupload
仅具有一个标识符,即调用的dateTime
,该标识符应足够唯一。然后,当我遍历所有调用日志的列表时,我会根据isdataupload()
函数检查每个调用日志,该函数执行领域查询,并检查数据库(领域)中是否已经存在具有该日期时间的调用日志。从理论上讲,这应该是可行的
然而,我注意到它并不总是有效的。似乎我的数据经常是过时的。当我执行realm.isAutoRefresh()
时,它返回false(尽管我发誓它曾经返回true)。在我的isDataUploaded
函数中,即使我在域上执行findAll()
操作,我也看不到我的所有数据-但数据确实命中了markdataaploaded
函数
这是我的代码-它在Kotlin中,但应该很容易理解:
val callLogCall = service.sendCalLLogs(childId, dataToUpload)
callLogCall.enqueue(object : Callback<Void> {
override fun onResponse(call: Call<Void>, response: Response<Void>) {
if (response.isSuccessful) {
Log.i(AppConstants.LOG_TAG, "Call log data uploaded successfully!")
this@CallLogData.markDataAsUploaded(dataToUpload)
} else {
Log.w(AppConstants.LOG_TAG, "Call log data upload failed")
}
}
override fun onFailure(call: Call<Void>, t: Throwable) {
Log.w(AppConstants.LOG_TAG, "Call log data upload error (onFailure) called")
}
})
// This function simply stores a Realm model for all the data that has been uploaded to the server
private fun markDataAsUploaded(dataToUpload: List<CallLog>) {
realm = Realm.getDefaultInstance()
for (data in dataToUpload) {
realm.beginTransaction()
val callLogUploaded = realm.createObject(CallLogUploaded::class.java)
callLogUploaded.callDate = data.callDate
realm.commitTransaction()
}
}
// This function checks to see if the data is already uploaded.
private fun isDataUploaded(callLog: CallLog) : Boolean {
return realm
.where(CallLogUploaded::class.java)
.equalTo("callDate", callLog.callDate)
.count() > 0L
}
// Gets the call logs - not the entire function
for (call in callLogs) {
val callLog = CallLog()
callLog.id = call.id
callLog.callDate = Utilities.getTimestampAsSeconds(call.callDate)
if (this.isDataUploaded(callLog)) {
continue
}
callLog.name = call.name
callLog.number = call.number
}
val callLogCall=service.sendCalLLogs(childId,dataToUpload)
排队(对象:Callback{
覆盖fun onResponse(调用:调用,响应:响应){
if(response.issucessful){
Log.i(AppConstants.Log_标记,“呼叫日志数据上传成功!”)
this@CallLogData.markDataAsUploaded(数据上传)
}否则{
Log.w(AppConstants.Log_标记,“调用日志数据上传失败”)
}
}
覆盖失效时的乐趣(调用:调用,t:可丢弃){
Log.w(AppConstants.Log_标记,“调用日志数据上载错误(onFailure)”调用)
}
})
//此函数只存储已上载到服务器的所有数据的领域模型
私人娱乐MarkDatasUploaded(dataToUpload:List){
realm=realm.getDefaultInstance()
for(dataToUpload中的数据){
realm.beginTransaction()
val calllogupload=realm.createObject(calllogupload::class.java)
CallLogUpload.callDate=data.callDate
realm.commitTransaction()
}
}
//此函数检查数据是否已上载。
private-fun-isdataupload(callLog:callLog):布尔值{
返回域
.where(calllogupload::class.java)
.equalTo(“callDate”,callLog.callDate)
.count()>0升
}
//获取调用日志,而不是整个函数
for(调用调用日志){
val callLog=callLog()
callLog.id=call.id
callLog.callDate=Utilities.getTimestampAsSeconds(call.callDate)
if(this.isDataUploaded(callLog)){
持续
}
callLog.name=call.name
callLog.number=call.number
}
我对Realm非常陌生,对Android开发也相当陌生,所以我非常感谢您能给我的任何帮助。谢谢 那是因为
// This function simply stores a Realm model for all the data that has been uploaded to the server
private fun markDataAsUploaded(dataToUpload: List<CallLog>) {
realm = Realm.getDefaultInstance()
for (data in dataToUpload) {
realm.beginTransaction()
val callLogUploaded = realm.createObject(CallLogUploaded::class.java)
callLogUploaded.callDate = data.callDate
realm.commitTransaction()
}
}
做
为了了解版本保留,您可以阅读
for (data in dataToUpload) {
realm.beginTransaction()
val callLogUploaded = realm.createObject(CallLogUploaded::class.java)
callLogUploaded.callDate = data.callDate
realm.commitTransaction()
}
realm.beginTransaction()
for (data in dataToUpload) {
val callLogUploaded = realm.createObject(CallLogUploaded::class.java)
callLogUploaded.callDate = data.callDate
}
realm.commitTransaction()