diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 91c1c6b6..bebb0c0e 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -490,6 +490,7 @@ "zoomMin": 18, "zoomMax": 20, "catch":false, + "checkLinkId": false, "transformer": [ { "k": "geometry", diff --git a/app/src/main/java/com/navinfo/omqs/Constant.kt b/app/src/main/java/com/navinfo/omqs/Constant.kt index 47a48643..a3b1c92f 100644 --- a/app/src/main/java/com/navinfo/omqs/Constant.kt +++ b/app/src/main/java/com/navinfo/omqs/Constant.kt @@ -1,6 +1,9 @@ package com.navinfo.omqs +import com.navinfo.collect.library.utils.MapParamUtils import com.navinfo.omqs.bean.ImportConfig +import io.realm.RealmConfiguration +import java.io.File class Constant { companion object { @@ -37,6 +40,30 @@ class Constant { */ lateinit var USER_DATA_PATH: String + /** + * 当前安装任务 + */ + lateinit var installTaskid: String + + /** + * 密码 + */ + val PASSWORD = "encryp".encodeToByteArray().copyInto(ByteArray(64)) + + /** + * 当前安装的任务文件 + */ + lateinit var currentInstallTaskFolder:File + + lateinit var currentInstallTaskConfig:RealmConfiguration + + /** + * 当前选择的任务 + */ + lateinit var currentSelectTaskFolder:File + + lateinit var currentSelectTaskConfig:RealmConfiguration + /** * 用户附件数据目录 */ @@ -62,6 +89,8 @@ class Constant { */ var INDOOR_IP: String = "" + + const val DEBUG = true /** diff --git a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt index 18f8f3b7..5ba472a5 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt @@ -1,5 +1,6 @@ package com.navinfo.omqs.bean +import android.util.Log import com.google.gson.annotations.Expose import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.omqs.db.ImportPreProcess @@ -20,8 +21,10 @@ class ImportConfig { fun transformProperties(renderEntity: RenderEntity): RenderEntity? { val transformList = tableMap[renderEntity.code.toString()]?.transformer if (transformList.isNullOrEmpty()) { + Log.e("qj", "子表转换为空===${renderEntity.code}") return renderEntity } + Log.e("qj", "子表转换不为空===${renderEntity.code}") for (transform in transformList) { // 开始执行转换 val key:String = transform.k diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt index bac74fc2..23a9a2a5 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -15,12 +15,16 @@ import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.enums.DataCodeEnum import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.omqs.Constant +import com.navinfo.omqs.Constant.Companion.currentInstallTaskConfig +import com.navinfo.omqs.Constant.Companion.currentInstallTaskFolder +import com.navinfo.omqs.Constant.Companion.installTaskid import com.navinfo.omqs.bean.ImportConfig import com.navinfo.omqs.db.deep.LinkList import com.navinfo.omqs.hilt.OMDBDataBaseHiltFactory import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.realm.Realm +import io.realm.RealmConfiguration import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -139,7 +143,18 @@ class ImportOMDBHelper @AssistedInject constructor( * */ suspend fun importOmdbZipFile(omdbZipFile: File, task: TaskBean): Flow = withContext(Dispatchers.IO) { + installTaskid = task.id.toString() + currentInstallTaskFolder = File(Constant.USER_DATA_PATH + "/$installTaskid") + if (!currentInstallTaskFolder.exists()) currentInstallTaskFolder.mkdirs() + currentInstallTaskConfig = RealmConfiguration.Builder() + .directory(currentInstallTaskFolder) + .name("OMQS.realm") + .encryptionKey(Constant.PASSWORD) + .allowQueriesOnUiThread(true) + .schemaVersion(2) + .build() val unZipFolder = File(omdbZipFile.parentFile, "result") + flow { if (unZipFolder.exists()) { unZipFolder.deleteRecursively() @@ -151,11 +166,13 @@ class ImportOMDBHelper @AssistedInject constructor( // 先获取当前配置的所有图层的个数,方便后续计算数据解析进度 var tableNum = 0 var processIndex = 0 + var dataIndex = 0 + + Realm.getInstance(currentInstallTaskConfig).beginTransaction() + for (importConfig in importConfigList) { tableNum += importConfig.tableMap.size } - - //缓存任务link信息,便于下面与数据进行任务link匹配 val hashMap: HashMap = HashMap() //define empty hashmap @@ -165,19 +182,17 @@ class ImportOMDBHelper @AssistedInject constructor( val resHashMap: HashMap = HashMap() //define empty hashmap + try { + // 遍历解压后的文件,读取该数据返回 + for (importConfig in importConfigList) { - // 遍历解压后的文件,读取该数据返回 - for (importConfig in importConfigList) { - val realm = Realm.getDefaultInstance() - try { for ((index, currentEntry) in importConfig.tableMap.entries.withIndex()) { - realm.beginTransaction() + val listResult = mutableListOf() val currentConfig = currentEntry.value val txtFile = unZipFiles.find { it.name == currentConfig.table } // 将listResult数据插入到Realm数据库中 -// val listResult = mutableListOf() currentConfig?.let { val list = FileIOUtils.readFile2List(txtFile, "UTF-8") Log.d("ImportOMDBHelper", "开始解析:${txtFile?.name}") @@ -201,7 +216,6 @@ class ImportOMDBHelper @AssistedInject constructor( map["qi_zoomMax"] = currentConfig.zoomMax // 先查询这个mesh下有没有数据,如果有则跳过即可 - // val meshEntity = Realm.getDefaultInstance().where(RenderEntity::class.java).equalTo("properties['mesh']", map["mesh"].toString()).findFirst() val renderEntity = RenderEntity() renderEntity.code = map["qi_code"].toString() renderEntity.name = map["qi_name"].toString() @@ -318,28 +332,28 @@ class ImportOMDBHelper @AssistedInject constructor( } } -// //交限增加相同LinkIn与LinkOut过滤原则 -// if (renderEntity.code == DataCodeEnum.OMDB_RESTRICTION.code) { -// if (renderEntity.properties.containsKey("linkIn") && renderEntity.properties.containsKey( -// "linkOut" -// ) -// ) { -// var linkIn = renderEntity.properties["linkIn"] -// var linkOut = renderEntity.properties["linkOut"] -// if (linkIn != null && linkOut != null) { -// var checkMsg = "$linkIn$linkOut" -// if (resHashMap.containsKey(checkMsg)) { -// Log.e( -// "qj", -// "${renderEntity.name}==过滤交限linkin与linkout相同且存在多条数据" -// ) -// continue -// } else { -// resHashMap.put(checkMsg, renderEntity) -// } -// } -// } -// } + //交限增加相同LinkIn与LinkOut过滤原则 + if (renderEntity.code == DataCodeEnum.OMDB_RESTRICTION.code) { + if (renderEntity.properties.containsKey("linkIn") && renderEntity.properties.containsKey( + "linkOut" + ) + ) { + var linkIn = renderEntity.properties["linkIn"] + var linkOut = renderEntity.properties["linkOut"] + if (linkIn != null && linkOut != null) { + var checkMsg = "$linkIn$linkOut" + if (resHashMap.containsKey(checkMsg)) { + Log.e( + "qj", + "${renderEntity.name}==过滤交限linkin与linkout相同且存在多条数据" + ) + continue + } else { + resHashMap.put(checkMsg, renderEntity) + } + } + } + } //遍历判断只显示与任务Link相关的任务数据 if (currentConfig.checkLinkId) { @@ -367,68 +381,52 @@ class ImportOMDBHelper @AssistedInject constructor( } } - } else if (renderEntity.code == DataCodeEnum.OMDB_INTERSECTION.code && renderEntity.properties.containsKey( - "linkList" - ) - ) { + }else if(renderEntity.code == DataCodeEnum.OMDB_INTERSECTION.code && renderEntity.properties.containsKey("linkList")){ if (renderEntity.properties["linkList"] != null) { - Log.e( - "qj", - "linkList==开始${renderEntity.name}==${renderEntity.properties["linkList"]}}" - ) + Log.e("qj", "linkList==开始${renderEntity.name}==${renderEntity.properties["linkList"]}}") - val linkList = - renderEntity.properties["linkList"] + val linkList = renderEntity.properties["linkList"] - if (!linkList.isNullOrEmpty() && linkList != "null") { + if (!linkList.isNullOrEmpty()&&linkList!="null") { - Log.e( - "qj", - "linkList==${renderEntity.name}==${renderEntity.properties["linkList"]}}" - ) + Log.e("qj", "linkList==${renderEntity.name}==${renderEntity.properties["linkList"]}}") - val list: List = gson.fromJson( - linkList, - object : - TypeToken>() {}.type - ) + val list: List = gson.fromJson(linkList, object : TypeToken>() {}.type) if (list != null) { - m@ for (link in list) { + m@for (link in list){ if (hashMap.containsKey(link.linkPid)) { renderEntity.enable = 1 + Log.e("qj", "${renderEntity.name}==包括任务link") break@m - Log.e( - "qj", - "${renderEntity.name}==包括任务link" - ) } } } - } else { - renderEntity.enable = 2 - Log.e("qj", "简单路口") } } - } else { - renderEntity.enable = 2 + } + + //过滤掉非任务路线上的数据 + if (renderEntity.enable != 1) { Log.e( "qj", - "${renderEntity.name}==不包括任务linkPid" + "${renderEntity.name}==过滤不包括任务路线上的数据" ) + continue } + } else { renderEntity.enable = 2 Log.e("qj", "${renderEntity.name}==不包括任务linkPid") } // 对renderEntity做预处理后再保存 - val resultEntity = - importConfig.transformProperties(renderEntity) + val resultEntity = importConfig.transformProperties(renderEntity) if (resultEntity != null) { + if (currentConfig.catch) { renderEntity.catchEnable = 0 } else { @@ -610,25 +608,41 @@ class ImportOMDBHelper @AssistedInject constructor( renderEntity.properties["startTime"] = "null" } } -// listResult.add(renderEntity) - realm.insert(renderEntity) + ++dataIndex + Log.e("qj", "统计==${dataIndex}") + + //移除该字段,减少数据量 + if(renderEntity.properties.containsKey("geometry")){ + renderEntity.properties.remove("geometry") + } + + Realm.getInstance(currentInstallTaskConfig).insert(renderEntity) } + + listResult.add(renderEntity) + } } } -// // 如果当前解析的是OMDB_RD_LINK数据,将其缓存在预处理类中,以便后续处理其他要素时使用 -// if (currentConfig.table == "OMDB_RD_LINK") { -// importConfig.preProcess.cacheRdLink = -// listResult.associateBy { it.properties["linkPid"] } -// } - realm.commitTransaction() + + // 如果当前解析的是OMDB_RD_LINK数据,将其缓存在预处理类中,以便后续处理其他要素时使用 + if (currentConfig.table == "OMDB_RD_LINK") { + importConfig.preProcess.cacheRdLink = + listResult.associateBy { it.properties["linkPid"] } + } // 1个文件发送一次flow流 emit("${++processIndex}/${tableNum}") } - } catch (e: Exception) { - realm.cancelTransaction() - throw e + } + Realm.getInstance (currentInstallTaskConfig).commitTransaction() + Realm.getInstance(currentInstallTaskConfig).close() + Log.e("qj", "安装结束") + } catch (e: Exception) { + if (Realm.getInstance(currentInstallTaskConfig).isInTransaction) { + Realm.getInstance(currentInstallTaskConfig).cancelTransaction() + } + throw e } emit("finish") } diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt index cf2396e8..c9aee110 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -4,7 +4,9 @@ import android.util.Log import com.navinfo.collect.library.data.entity.ReferenceEntity import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.utils.GeometryTools +import com.navinfo.omqs.Constant import io.realm.Realm +import io.realm.RealmConfiguration import org.json.JSONArray import org.json.JSONObject import org.locationtech.jts.algorithm.Angle @@ -18,25 +20,25 @@ class ImportPreProcess { val code2NameMap = Code2NameMap() lateinit var cacheRdLink: Map val defaultTranslateDistance = 3.0 - val testFlag:Boolean = true + val testFlag: Boolean = false fun checkCircleRoad(renderEntity: RenderEntity): Boolean { -// val linkInId = renderEntity.properties["linkIn"] -// val linkOutId = renderEntity.properties["linkOut"] -// // 根据linkIn和linkOut获取对应的link数据 -// val linkInEntity = cacheRdLink[linkInId] -// val linkOutEntity = cacheRdLink[linkOutId] -// Log.d( -// "checkCircleRoad", -// "LinkInEntity: ${linkInId}- ${linkInEntity?.properties?.get("snodePid")},LinkOutEntity: ${linkOutId}- ${ -// linkOutEntity?.properties?.get("enodePid") -// }" -// ) -// // 查询linkIn的sNode和linkOut的eNode是否相同,如果相同,认为数据是环形路口,返回false -// if (linkInEntity != null && linkOutEntity != null) { -// if (linkInEntity.properties["snodePid"] == linkOutEntity.properties["enodePid"] || linkInEntity.properties["enodePid"] == linkOutEntity.properties["snodePid"] || linkInEntity.properties["snodePid"] == linkOutEntity.properties["snodePid"] || linkInEntity.properties["enodePid"] == linkOutEntity.properties["enodePid"]) { -// return false -// } -// } + val linkInId = renderEntity.properties["linkIn"] + val linkOutId = renderEntity.properties["linkOut"] + // 根据linkIn和linkOut获取对应的link数据 + val linkInEntity = cacheRdLink[linkInId] + val linkOutEntity = cacheRdLink[linkOutId] + Log.d( + "checkCircleRoad", + "LinkInEntity: ${linkInId}- ${linkInEntity?.properties?.get("snodePid")},LinkOutEntity: ${linkOutId}- ${ + linkOutEntity?.properties?.get("enodePid") + }" + ) + // 查询linkIn的sNode和linkOut的eNode是否相同,如果相同,认为数据是环形路口,返回false + if (linkInEntity != null && linkOutEntity != null) { + if (linkInEntity.properties["snodePid"] == linkOutEntity.properties["enodePid"] || linkInEntity.properties["enodePid"] == linkOutEntity.properties["snodePid"] || linkInEntity.properties["snodePid"] == linkOutEntity.properties["snodePid"] || linkInEntity.properties["enodePid"] == linkOutEntity.properties["enodePid"]) { + return false + } + } return true } @@ -45,7 +47,7 @@ class ImportPreProcess { * @param direction 判断当前数据是否为逆向,给定的应该是一个a=b的表达式,a为对应的properties的key,b为对应的值 * */ fun translateRight(renderEntity: RenderEntity, direction: String = "") { - if(testFlag){ + if (testFlag) { return } // 获取当前renderEntity的geometry @@ -55,7 +57,8 @@ class ImportPreProcess { // 如果数据属性中存在angle,则使用该值,否则需要根据line中的数据进行计算 if (renderEntity?.properties?.get( "angle" - )!=null) { + ) != null + ) { var angle = renderEntity?.properties?.get("angle")?.toDouble()!! // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角 angle = -((450 - angle) % 360) @@ -112,7 +115,7 @@ class ImportPreProcess { * 向方向对应的反方向偏移 * */ fun translateBack(renderEntity: RenderEntity, direction: String = "") { - if(testFlag){ + if (testFlag) { return } // 获取当前renderEntity的geometry @@ -173,7 +176,7 @@ class ImportPreProcess { * 生成偏移后数据的起终点参考线 * */ fun generateS2EReferenceLine(renderEntity: RenderEntity) { - if(testFlag){ + if (testFlag) { return } // 获取当前renderEntity的geometry,该坐标为偏移后坐标,即为终点 @@ -207,7 +210,9 @@ class ImportPreProcess { GeometryTools.createLineString(arrayOf(pointStart, pointEnd)).toString() startEndReference.properties["qi_table"] = renderEntity.table startEndReference.properties["type"] = "s_2_e" - Realm.getDefaultInstance().insert(startEndReference) + val listResult = mutableListOf() + listResult.add(startEndReference) + insertData(listResult) } fun generateS2EReferencePoint( @@ -219,6 +224,7 @@ class ImportPreProcess { val pointEnd = geometry!!.coordinates[geometry.numPoints - 1] // 获取这个geometry对应的结束点坐标 val pointStart = geometry!!.coordinates[0] // 获取这个geometry对应的起点 + val listResult = mutableListOf() // 将这个起终点的线记录在数据中 val startReference = ReferenceEntity() @@ -232,26 +238,31 @@ class ImportPreProcess { startReference.enable = renderEntity.enable // 起点坐标 - startReference.geometry = GeometryTools.createGeometry(GeoPoint(pointStart.y, pointStart.x)).toString() + startReference.geometry = + GeometryTools.createGeometry(GeoPoint(pointStart.y, pointStart.x)).toString() startReference.properties["qi_table"] = renderEntity.table - Log.e("qj","generateS2EReferencePoint===$table===$proKey") + Log.e("qj", "generateS2EReferencePoint===$table===$proKey") if (renderEntity.table == table) { - Log.e("qj","generateS2EReferencePoint===开始") + Log.e("qj", "generateS2EReferencePoint===开始") if (renderEntity.properties.containsKey(proKey)) { - if(renderEntity.properties[proKey]!=""){ + if (renderEntity.properties[proKey] != "") { startReference.properties["type"] = "s_2_p_${renderEntity.properties[proKey]}" - }else{ + } else { startReference.properties["type"] = "s_2_p_0" } - Log.e("qj","generateS2EReferencePoint===s_2_p_${renderEntity.properties[proKey]}") + Log.e("qj", "generateS2EReferencePoint===s_2_p_${renderEntity.properties[proKey]}") } } else { startReference.properties["type"] = "s_2_p" - Log.e("qj","generateS2EReferencePoint===s_2_p${renderEntity.name}") + Log.e("qj", "generateS2EReferencePoint===s_2_p${renderEntity.name}") } - startReference.properties["geometry"] = startReference.geometry - Realm.getDefaultInstance().insert(startReference) + Log.e("qj", "generateS2EReferencePoint===${startReference.geometry}") + + startReference.properties["geometry"] = startReference.geometry + listResult.add(startReference) + + Log.e("qj", "generateS2EReferencePoint===1") val endReference = ReferenceEntity() endReference.renderEntityId = renderEntity.id @@ -263,23 +274,30 @@ class ImportPreProcess { endReference.taskId = renderEntity.taskId endReference.enable = renderEntity.enable + Log.e("qj", "generateS2EReferencePoint===2") + // 终点坐标 - endReference.geometry = GeometryTools.createGeometry(GeoPoint(pointEnd.y, pointEnd.x)).toString() + endReference.geometry = + GeometryTools.createGeometry(GeoPoint(pointEnd.y, pointEnd.x)).toString() + Log.e("qj", "generateS2EReferencePoint===3") endReference.properties["qi_table"] = renderEntity.table if (renderEntity.table == table) { if (renderEntity.properties.containsKey(proKey)) { - if(renderEntity.properties[proKey]!=""){ + if (renderEntity.properties[proKey] != "") { endReference.properties["type"] = "e_2_p_${renderEntity.properties[proKey]}" - }else{ + } else { endReference.properties["type"] = "e_2_p_0" } } } else { endReference.properties["type"] = "e_2_p" - Log.e("qj","generateS2EReferencePoint===e_2_p${renderEntity.name}") + Log.e("qj", "generateS2EReferencePoint===e_2_p${renderEntity.name}") } endReference.properties["geometry"] = endReference.geometry - Realm.getDefaultInstance().insert(endReference) + + listResult.add(endReference) + Log.e("qj", "generateS2EReferencePoint===4") + insertData(listResult) } /** @@ -356,6 +374,7 @@ class ImportPreProcess { geometry?.coordinate?.y!! ) * Math.sin(radian) } + val listResult = mutableListOf() for (pointStart in pointStartArray) { val coorEnd = Coordinate(pointStart.getX() + dx, pointStart.getY() + dy, pointStart.z) @@ -373,9 +392,9 @@ class ImportPreProcess { WKTWriter(3).write(GeometryTools.createLineString(arrayOf(pointStart, coorEnd))) angleReference.properties["qi_table"] = renderEntity.table angleReference.properties["type"] = "angle" - Realm.getDefaultInstance().insert(angleReference) + listResult.add(angleReference) } - + insertData(listResult) } fun addAngleFromGeometry(renderEntity: RenderEntity): String { @@ -443,6 +462,7 @@ class ImportPreProcess { // 分别获取两个数组中的数据,取第一个作为主数据,另外两个作为辅助渲染数据 val laneInfoDirectArray = JSONArray(laneinfoGroup[0].toString()) val laneInfoTypeArray = JSONArray(laneinfoGroup[1].toString()) + val listResult = mutableListOf() for (i in 0 until laneInfoDirectArray.length()) { // 根据后续的数据生成辅助表数据 @@ -461,12 +481,14 @@ class ImportPreProcess { laneInfoDirectArray[i].toString().split(",").distinct().joinToString("_") referenceEntity.properties["currentType"] = laneInfoTypeArray[i].toString() - val type = if (referenceEntity.properties["currentType"]=="0") "normal" else if (referenceEntity.properties["currentType"]=="1") "extend" else "bus" + val type = + if (referenceEntity.properties["currentType"] == "0") "normal" else if (referenceEntity.properties["currentType"] == "1") "extend" else "bus" referenceEntity.properties["symbol"] = "assets:omdb/4601/${type}/1301_${referenceEntity.properties["currentDirect"]}.svg" Log.d("unpackingLaneInfo", referenceEntity.properties["symbol"].toString()) - Realm.getDefaultInstance().insert(referenceEntity) + listResult.add(referenceEntity) } + insertData(listResult) } } } @@ -480,22 +502,22 @@ class ImportPreProcess { var type = renderEntity.properties["sa"] - if(type!=null&&type=="1"){ + if (type != null && type == "1") { renderEntity.properties["name"] = "SA" renderEntity.properties["type"] = "1" - }else{ + } else { type = renderEntity.properties["pa"] - if(type!=null&&type=="1"){ + if (type != null && type == "1") { renderEntity.properties["type"] = "2" - Log.e("qj","generateRoadText===2") - } else{ + Log.e("qj", "generateRoadText===2") + } else { type = renderEntity.properties["frontage"] - if(type!=null&&type=="1"){ + if (type != null && type == "1") { renderEntity.properties["name"] = "FRONTAGE" renderEntity.properties["type"] = "3" - }else{ + } else { type = renderEntity.properties["mainSideAccess"] - if(type!=null&&type=="1"){ + if (type != null && type == "1") { renderEntity.properties["name"] = "MAIN" renderEntity.properties["type"] = "4" } @@ -568,7 +590,9 @@ class ImportPreProcess { angleReference.zoomMax = renderEntity.zoomMax angleReference.taskId = renderEntity.taskId angleReference.enable = renderEntity.enable - Realm.getDefaultInstance().insert(angleReference) + val listResult = mutableListOf() + listResult.add(angleReference) + insertData(listResult) } @@ -579,6 +603,8 @@ class ImportPreProcess { // 路口数据的其他点位,是保存在nodeList对应的数组下 if (renderEntity.properties.containsKey("nodeList")) { val nodeListJsonArray: JSONArray = JSONArray(renderEntity.properties["nodeList"]) + val listResult = mutableListOf() + for (i in 0 until nodeListJsonArray.length()) { val nodeJSONObject = nodeListJsonArray.getJSONObject(i) val intersectionReference = ReferenceEntity() @@ -595,10 +621,12 @@ class ImportPreProcess { GeometryTools.createGeometry(nodeJSONObject["geometry"].toString()).toString() intersectionReference.properties["qi_table"] = renderEntity.table intersectionReference.properties["type"] = "node" - Realm.getDefaultInstance().insert(intersectionReference) + listResult.add(intersectionReference) } + insertData(listResult) } } + /** * 生成默认路口数据的参考数据 * */ @@ -641,7 +669,12 @@ class ImportPreProcess { // renderEntity.geometry = // WKTWriter(3).write(GeometryTools.createLineString(geometry.coordinates)) - renderEntity.geometry = GeometryTools.createGeometry(GeoPoint(geometry.coordinates[0].y, geometry.coordinates[0].x)).toString() + renderEntity.geometry = GeometryTools.createGeometry( + GeoPoint( + geometry.coordinates[0].y, + geometry.coordinates[0].x + ) + ).toString() } } @@ -680,7 +713,12 @@ class ImportPreProcess { * @param suffix 图片的后缀(根据codeName获取到的code后,匹配图片的后缀,还包含code码后的其他字符串内容) * @param codeName 数据对应的code字段的字段名 * */ - fun obtainReferenceDynamicSrc(renderEntity: RenderEntity, prefix: String, suffix: String, codeName: String) { + fun obtainReferenceDynamicSrc( + renderEntity: RenderEntity, + prefix: String, + suffix: String, + codeName: String + ) { if (codeName.isNullOrBlank()) { return } @@ -731,6 +769,7 @@ class ImportPreProcess { defaultTranslateDistance, geometry?.coordinate?.y!! ) * Math.sin(radian) + val listResult = mutableListOf() for (pointStart in pointStartArray) { val coorEnd = Coordinate(pointStart.getX() + dx, pointStart.getY() + dy, pointStart.z) @@ -750,14 +789,29 @@ class ImportPreProcess { dynamicSrcReference.properties["type"] = "dynamicSrc" val code = renderEntity.properties[codeName] dynamicSrcReference.properties["src"] = "${prefix}${code}${suffix}" - Realm.getDefaultInstance().insert(dynamicSrcReference) + listResult.add(dynamicSrcReference) + } + insertData(listResult) + } + + private fun insertData(list:List){ + Log.e("qj", "子表插入==") + if(list!=null&& list.isNotEmpty()){ + Log.e("qj", "子表插入开始==") + Realm.getInstance(Constant.currentInstallTaskConfig).insert(list) + Log.e("qj", "子表插入结束==") } } /** * 向当前renderEntity中添加动态属性 * */ - fun obtainDynamicSrc(renderEntity: RenderEntity, prefix: String, suffix: String, codeName: String) { + fun obtainDynamicSrc( + renderEntity: RenderEntity, + prefix: String, + suffix: String, + codeName: String + ) { val code = renderEntity.properties[codeName] renderEntity.properties["src"] = "${prefix}${code}${suffix}" } diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index 4315475d..69045a4f 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -12,6 +12,7 @@ import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.GeometryToolsKt import com.navinfo.collect.library.utils.MapParamUtils +import com.navinfo.omqs.Constant import io.realm.Realm import io.realm.RealmModel import io.realm.RealmQuery @@ -61,9 +62,9 @@ class RealmOperateHelper() { val yStart = tileYSet.stream().min(Comparator.naturalOrder()).orElse(null) val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null) // 查询realm中对应tile号的数据 - val realm = getRealmDefaultInstance() + val realm = getSelectTaskRealmInstance() val realmList = - getRealmTools(RenderEntity::class.java, false) + getSelectTaskRealmTools(RenderEntity::class.java, false) .equalTo("table", "OMDB_RD_LINK") .greaterThanOrEqualTo("tileX", xStart) .lessThanOrEqualTo("tileX", xEnd) @@ -72,6 +73,7 @@ class RealmOperateHelper() { .findAll() // 将获取到的数据和查询的polygon做相交,只返回相交的数据 val dataList = realm.copyFromRealm(realmList) + realm.close() val queryResult = dataList?.stream()?.filter { polygon.intersects(it.wkt) }?.toList() @@ -127,8 +129,8 @@ class RealmOperateHelper() { val yStart = tileYSet.stream().min(Comparator.naturalOrder()).orElse(null) val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null) // 查询realm中对应tile号的数据 - val realm = getRealmDefaultInstance() - val realmList = getRealmTools(RenderEntity::class.java, true) + val realm = getSelectTaskRealmInstance() + val realmList = getSelectTaskRealmTools(RenderEntity::class.java, true) .equalTo("table", table) .greaterThanOrEqualTo("tileX", xStart) .lessThanOrEqualTo("tileX", xEnd) @@ -169,34 +171,41 @@ class RealmOperateHelper() { buffer, bufferType ) - val realm = getRealmDefaultInstance() - val realmList = getRealmTools(HadLinkDvoBean::class.java, false).findAll() - var linkBean: HadLinkDvoBean? = null - var nearLast: Double = 99999.99 - for (link in realmList) { - if (polygon.intersects(GeometryTools.createGeometry(link.geometry))) { - val near = point.distance(GeometryTools.createGeoPoint(link.geometry)) - if (near < nearLast) { - nearLast = near - linkBean = link + try{ + val realmList = getRealmTools(HadLinkDvoBean::class.java).findAll() + var linkBean: HadLinkDvoBean? = null + var nearLast: Double = 99999.99 + for (link in realmList) { + if (polygon.intersects(GeometryTools.createGeometry(link.geometry))) { + val near = point.distance(GeometryTools.createGeoPoint(link.geometry)) + if (near < nearLast) { + nearLast = near + linkBean = link + } } } + if (linkBean != null) + return realm.copyFromRealm(linkBean) + }catch (e:Exception){ + + }finally { + realm.close() } - if (linkBean != null) - return realm.copyFromRealm(linkBean) + return null } suspend fun queryLink(linkPid: String): RenderEntity? { var link: RenderEntity? = null - val realm = getRealmDefaultInstance() + val realm = getSelectTaskRealmInstance() val realmR = - getRealmTools(RenderEntity::class.java, true).equalTo("table", "OMDB_RD_LINK") + getSelectTaskRealmTools(RenderEntity::class.java, true).equalTo("table", "OMDB_RD_LINK") .equalTo("properties['${LinkTable.linkPid}']", linkPid).findFirst() if (realmR != null) { link = realm.copyFromRealm(realmR) } + realm.close() return link } @@ -207,20 +216,21 @@ class RealmOperateHelper() { suspend fun queryQcRecordBean(markId: String): QsRecordBean? { var qsRecordBean: QsRecordBean? = null val realm = getRealmDefaultInstance() - val realmR = getRealmTools(QsRecordBean::class.java, false) + val realmR = getRealmTools(QsRecordBean::class.java) .equalTo("table", "QsRecordBean").equalTo("id", markId).findFirst() if (realmR != null) { qsRecordBean = realm.copyFromRealm(realmR) } + realm.close() return qsRecordBean } suspend fun queryLinkToMutableRenderEntityList(linkPid: String): MutableList? { val resultList = mutableListOf() - val realm = getRealmDefaultInstance() + val realm = getSelectTaskRealmInstance() - val realmR = getRealmTools(RenderEntity::class.java, true) + val realmR = getSelectTaskRealmTools(RenderEntity::class.java, true) .equalTo("properties['${LinkTable.linkPid}']", linkPid).findAll() val dataList = realm.copyFromRealm(realmR) @@ -229,6 +239,7 @@ class RealmOperateHelper() { resultList.add(it) } + realm.close() return resultList } @@ -261,11 +272,11 @@ class RealmOperateHelper() { val xEnd = tileXSet.stream().max(Comparator.naturalOrder()).orElse(null) val yStart = tileYSet.stream().min(Comparator.naturalOrder()).orElse(null) val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null) - val realm = getRealmDefaultInstance() + val realm = getSelectTaskRealmInstance() var realmList = mutableListOf() if(catchAll){ // 查询realm中对应tile号的数据 - realmList = getRealmTools(RenderEntity::class.java, false) + realmList = getSelectTaskRealmTools(RenderEntity::class.java,false) .greaterThanOrEqualTo("tileX", xStart) .lessThanOrEqualTo("tileX", xEnd) .greaterThanOrEqualTo("tileY", yStart) @@ -273,7 +284,7 @@ class RealmOperateHelper() { .findAll() }else{ // 查询realm中对应tile号的数据 - realmList = getRealmTools(RenderEntity::class.java, false) + realmList = getSelectTaskRealmTools(RenderEntity::class.java, false) .lessThan("catchEnable", 1) .greaterThanOrEqualTo("tileX", xStart) .lessThanOrEqualTo("tileX", xEnd) @@ -292,7 +303,7 @@ class RealmOperateHelper() { result.addAll(realm.copyFromRealm(it)) } } - + realm.close() return result } @@ -305,12 +316,13 @@ class RealmOperateHelper() { * */ suspend fun queryLinkByLinkPid(linkPid: String): MutableList { val result = mutableListOf() - val realm = getRealmDefaultInstance() - val realmList = getRealmTools(RenderEntity::class.java, false) + val realm = getSelectTaskRealmInstance() + val realmList = getSelectTaskRealmTools(RenderEntity::class.java, false) .notEqualTo("table", DataCodeEnum.OMDB_RD_LINK.name) .equalTo("properties['${LinkTable.linkPid}']", linkPid) .findAll() result.addAll(realm.copyFromRealm(realmList)) + realm.close() return result } @@ -381,34 +393,58 @@ class RealmOperateHelper() { return wkt } - - fun getRealmTools(clazz: Class, enableSql: Boolean): RealmQuery { - return if (MapParamUtils.getDataLayerEnum() != null) { - - var sql = "taskId=${MapParamUtils.getTaskId()}" - - if (enableSql) { - sql = - " enable${MapParamUtils.getDataLayerEnum().sql} and taskId=${MapParamUtils.getTaskId()}" - } - - getRealmDefaultInstance().where(clazz).rawPredicate(sql) - - } else { - getRealmDefaultInstance().where(clazz) - .rawPredicate(" taskId=${MapParamUtils.getTaskId()}") - } + /** + * 默认的数据库,用于存储任务、作业数据 + * @param clazz 查询表 + * @param enableSql + * */ + fun getRealmTools(clazz: Class): RealmQuery { + return getRealmDefaultInstance().where(clazz) } fun getRealmDefaultInstance(): Realm { if (isUpdate) { Log.e("jingo", "数据库更新") + if(Realm.getDefaultInstance().isInTransaction){ + Realm.getDefaultInstance().cancelTransaction() + Log.e("jingo", "数据库正在事物,需要退出当前事物") + } Realm.getDefaultInstance().refresh() isUpdate = false; } return Realm.getDefaultInstance() } + + fun getSelectTaskRealmTools(clazz: Class, enableSql: Boolean): RealmQuery { + return if (MapParamUtils.getDataLayerEnum() != null) { + + if (enableSql) { + var sql = + " enable${MapParamUtils.getDataLayerEnum().sql} }" + getSelectTaskRealmInstance().where(clazz).rawPredicate(sql) + }else{ + getSelectTaskRealmInstance().where(clazz) + } + + } else { + getSelectTaskRealmInstance().where(clazz) + } + } + + fun getSelectTaskRealmInstance(): Realm { + if (isUpdate) { + Log.e("jingo", "数据库更新") + if(Realm.getInstance(Constant.currentSelectTaskConfig).isInTransaction){ + Realm.getInstance(Constant.currentSelectTaskConfig).cancelTransaction() + Log.e("jingo", "数据库正在事物,需要退出当前事物") + } + Realm.getInstance(Constant.currentSelectTaskConfig).refresh() + isUpdate = false; + } + return Realm.getInstance(Constant.currentSelectTaskConfig) + } + fun updateRealmDefaultInstance() { isUpdate = true } diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt index 11131659..e57f73c3 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt @@ -106,9 +106,10 @@ class TaskDownloadScope( downloadData.postValue(taskBean) if (status != FileDownloadStatus.LOADING && status != FileDownloadStatus.IMPORTING) { val realm = Realm.getDefaultInstance() - realm.executeTransaction { - it.insertOrUpdate(taskBean) - } + realm.beginTransaction() + realm.insertOrUpdate(taskBean) + realm.commitTransaction() + realm.close() } } } @@ -142,6 +143,7 @@ class TaskDownloadScope( Log.e("jingo", "数据安装 $it") if (it == "finish") { change(FileDownloadStatus.DONE) + Log.e("jingo", "数据安装结束") withContext(Dispatchers.Main) { downloadManager.mapController.layerManagerHandler.updateOMDBVectorTileLayer() } diff --git a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt index d15c4302..6fec6aa7 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt @@ -84,6 +84,7 @@ class TaskUploadScope( realm.executeTransaction { it.copyToRealmOrUpdate(taskBean) } + realm.close() } } } @@ -220,7 +221,7 @@ class TaskUploadScope( } } } - + realm.close() } if (bodyList.size > 0) { diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt index 7d63ab7b..c3053205 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt @@ -1,5 +1,7 @@ package com.navinfo.omqs.ui.activity.login +import android.app.Activity +import android.app.ActivityManager import android.content.Intent import android.os.Bundle import android.util.DisplayMetrics @@ -9,12 +11,15 @@ import androidx.activity.viewModels import androidx.appcompat.app.AlertDialog import androidx.databinding.DataBindingUtil import androidx.lifecycle.Observer +import androidx.lifecycle.viewModelScope import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.navinfo.omqs.R import com.navinfo.omqs.databinding.ActivityLoginBinding import com.navinfo.omqs.ui.activity.CheckPermissionsActivity import com.navinfo.omqs.ui.activity.map.MainActivity import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch /** * 登陆页面 @@ -72,36 +77,46 @@ class LoginActivity : CheckPermissionsActivity() { LoginStatus.LOGIN_STATUS_NET_LOADING -> { loginDialog("验证用户信息...") } + LoginStatus.LOGIN_STATUS_FOLDER_INIT -> { loginDialog("检查本地数据...") } + LoginStatus.LOGIN_STATUS_FOLDER_FAILURE -> { Toast.makeText(this, "文件夹初始化失败", Toast.LENGTH_SHORT).show() loginDialog?.dismiss() loginDialog = null } + LoginStatus.LOGIN_STATUS_NET_FAILURE -> { Toast.makeText(this, "网络访问失败", Toast.LENGTH_SHORT).show() loginDialog?.dismiss() loginDialog = null } + LoginStatus.LOGIN_STATUS_SUCCESS -> { loginDialog?.dismiss() loginDialog = null + //Toast.makeText(this, "插入成功", Toast.LENGTH_SHORT).show() + val intent = Intent(this@LoginActivity, MainActivity::class.java) startActivity(intent) finish() } + LoginStatus.LOGIN_STATUS_CANCEL -> { loginDialog?.dismiss() loginDialog = null } + LoginStatus.LOGIN_STATUS_NET_OFFLINE_MAP -> { loginDialog("检查离线地图...") } + LoginStatus.LOGIN_STATUS_NET_GET_TASK_LIST -> { loginDialog("获取任务列表...") } + else -> {} } } @@ -109,7 +124,6 @@ class LoginActivity : CheckPermissionsActivity() { private fun initView() { //登录校验,初始化成功 viewModel.loginStatus.observe(this, loginObserve) - } /** diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt index 52582359..773b1c90 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt @@ -9,6 +9,9 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.blankj.utilcode.util.ResourceUtils +import com.navinfo.collect.library.data.entity.LinkInfoBean +import com.navinfo.collect.library.data.entity.ReferenceEntity +import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.omqs.Constant import com.navinfo.omqs.bean.LoginUserBean @@ -85,6 +88,8 @@ class LoginViewModel @Inject constructor( var sharedPreferences: SharedPreferences? = null + var dataIndex = 0 + init { loginUser.value = LoginUserBean(userCode = "haofuyue00213", passWord = "123456") } @@ -292,7 +297,43 @@ class LoginViewModel @Inject constructor( } } + realm.close() } + //测试代码 +/* viewModelScope.launch(Dispatchers.IO) { + + Log.e("qj", "test===开始安装") + + for (i in 0 until 30) { + val userTaskFolder = File(Constant.USER_DATA_PATH+"/$i") + if (!userTaskFolder.exists()) userTaskFolder.mkdirs() + val password = "encryp".encodeToByteArray().copyInto(ByteArray(64)) + val config = RealmConfiguration.Builder() + .directory(userTaskFolder) + .name("OMQS.realm") + .encryptionKey(password) + .allowQueriesOnUiThread(true) + .schemaVersion(2) + .build() + + var realm = Realm.getInstance(config) + Realm.compactRealm(config) +*//* realm.beginTransaction() + for (j in 0 until 30000) { + //if(i!=1){ + val renderEntity = RenderEntity() + renderEntity.geometry = "LINESTRING(116.23932262211743 40.12579920189081 35.74, 116.23931822895703 40.12581470592407 35.76, 116.23930624771914 40.12585781700239 35.79, 116.23928258433983 40.125939338575144 35.89, 116.23926850609101 40.12598745138618 35.96, 116.23924414376185 40.126070773581354 36.06, 116.23922856776639 40.12612328771694 36.12, 116.2392046045976 40.126203109397004 36.24, 116.23918922835792 40.12625522340176 36.32, 116.23916396702913 40.12633774615302 36.45, 116.23914859055587 40.126387759995225 36.55, 116.2391203337466 40.12647908540596 36.67, 116.23910755319447 40.12651959683855 36.75, 116.2390815927516 40.12660212010318 36.9, 116.23906871229808 40.12664233159039 36.99, 116.23903915709849 40.126733957916805 37.18, 116.23902338079155 40.12678097181321 37.28, 116.23899562279767 40.12686599649683 37.47, 116.23897994641094 40.12691301036026 37.57, 116.23895278734514 40.12699443439999 37.74, 116.23893721087765 40.12704144822964 37.87, 116.23890605755072 40.127132075611264 38.07, 116.23889088041396 40.1271770890434 38.18, 116.23887460471097 40.12722350328997 38.28, 116.2388636211133 40.12725481290913 38.35, 116.23884574788786 40.12730632862395 38.48, 116.23881908762554 40.12738135192382 38.65, 116.23881679105517 40.12738785393584 38.67, 116.23879302637583 40.12745367463593 38.83, 116.23877944663403 40.127491786520146 38.92, 116.23877095932345 40.127515793968584 38.97, 116.23875098890943 40.12757001129976 39.11, 116.2387227308574 40.12764713588771 39.28, 116.2387081525541 40.127687248614656 39.37, 116.23867370351799 40.12777927847206 39.58, 116.2386545318675 40.12783019508165 39.72, 116.23862417686668 40.12791142146556 39.92, 116.23860640319212 40.12795863689979 40.04, 116.23859292304284 40.127993448523135 40.12, 116.23857504944692 40.12804016399674 40.24, 116.23855657681928 40.128088980051075 40.34, 116.23853031552511 40.12815650272686 40.51, 116.23850904685051 40.12821082107825 40.64, 116.2384813875936 40.12828124495082 40.79, 116.23845742281154 40.12834136557736 40.92, 116.23842427149486 40.12842389408986 41.14, 116.23840380160156 40.1284750117316 41.26, 116.23837174854405 40.128553139214226 41.45, 116.2383542741467 40.12859565420684 41.55, 116.23831942516678 40.12867978408208 41.76, 116.23830025323893 40.128725900522745 41.88, 116.23826470526342 40.12881083099175 42.05, 116.23824683139586 40.12885314629496 42.16, 116.23821018495624 40.128939377661524 42.37, 116.23818931532472 40.128987195429495 42.48, 116.23815506532867 40.12906662471337 42.66, 116.23813779047674 40.12910593943215 42.75, 116.23813469496669 40.12911284205781 42.77, 116.23809884729717 40.12919517271111 42.95, 116.23808067375946 40.12923618820391 43.04, 116.2380433282688 40.129321120140304 43.22, 116.23801996225431 40.12937304003738 43.34, 116.23798521289724 40.129450669705015 43.5, 116.23796793804728 40.12948888443628 43.6, 116.23794277466426 40.12954420588348 43.69, 116.23792699756609 40.129578319290346 43.76, 116.23790423067194 40.129627838680705 43.88, 116.23786848266316 40.12970526913737 44, 116.2378471137247 40.129751187332936 44.1, 116.23780657269158 40.129838121884916 44.27, 116.23778390560862 40.12988604116754 44.34, 116.23774725889854 40.12996367239866 44.44, 116.23772349342555 40.130013492631235 44.55, 116.23768435029899 40.1300951259634 44.66, 116.23766248205574 40.13014034457485 44.71, 116.23762343873513 40.13022047779343 44.81, 116.23760077162373 40.13026659706827 44.86, 116.23755973121209 40.13034993200096 44.94, 116.2375357659646 40.130397952369805 45, 116.23749612344814 40.13047688606479 45.07, 116.2374712595042 40.130526107202286 45.09, 116.23743321468324 40.13060103955511 45.14, 116.23740815097895 40.13064966082994 45.19, 116.23736870811013 40.13072579432282 45.22, 116.23734823785306 40.13076581177513 45.23, 116.23730330299801 40.13085194998242 45.26, 116.23727863880121 40.13089927099006 45.27, 116.23723709907071 40.13097820635225 45.29, 116.23721153611818 40.13102612808514 45.31, 116.23717129448862 40.13110146233737 45.34, 116.23714573160329 40.13114928412407 45.33, 116.23710359278992 40.1312276200455 45.32, 116.23707812976424 40.13127464175462 45.29, 116.23703688966032 40.13135037692713 45.3, 116.23701032824796 40.13139889959046 45.29, 116.23696699119911 40.13147743656524 45.27, 116.23694162802717 40.13152295819616 45.24, 116.23689978876293 40.13159739386983 45.2, 116.23687302763048 40.13164481670404 45.16, 116.23683009001913 40.13172055336384 45.12, 116.23680592516881 40.13176317402547 45.08, 116.23676029149024 40.131842613004956 45.02, 116.23673343055732 40.1318892359725 44.98, 116.2366884959176 40.131966674401994 44.9, 116.23666123557125 40.13201329771908 44.84, 116.2366155021779 40.13209153690089 44.77, 116.23658744310768 40.13213966099004 44.69, 116.23653821483212 40.132222703193655 44.58, 116.23651345088638 40.132263924406 44.53, 116.23646572044586 40.132343265344616 44.4, 116.23644225475998 40.13238288555961 44.34, 116.23639053016349 40.132467629947804 44.19, 116.23636526707928 40.132509351694566 44.12, 116.23631583935669 40.13259069428363 43.96, 116.23630775110645 40.13260330119531 43.94, 116.2362904763613 40.13263141607684 43.87, 116.23624194730323 40.13270975788138 43.73, 116.23621518647366 40.13275298097316 43.63, 116.23616885425847 40.1328269209311 43.46, 116.23613919766159 40.13287394652052 43.34, 116.23609236625721 40.132947986974415 43.16, 116.2360636083881 40.132993111823716 43.06, 116.23601388134549 40.133071254874444 42.86, 116.23598522335485 40.133115579659105 42.73, 116.23593629520064 40.13319152206869 42.51, 116.2359073376966 40.13323584715097 42.4, 116.23585751089514 40.13331199036941 42.2, 116.2358283537537 40.13335631567969 42.08, 116.23577752849239 40.13343305982414 41.89, 116.23574907033701 40.13347558454054 41.78, 116.23569135533083 40.133561934767584 41.55, 116.2356704860765 40.13359295293967 41.47, 116.2356620984319 40.13360536024213 41.44, 116.23562714986441 40.1336563906336 41.31, 116.23561097370154 40.13368010472439 41.26, 116.23557981965153 40.13372583189419 41.16, 116.23552599918413 40.13380517894775 41.01, 116.2354947453622 40.13385070626818 40.91, 116.23544961210217 40.133916245764205 40.78, 116.23541346555174 40.133968177396326 40.67, 116.23536124285798 40.134043023162974 40.55, 116.23533018882797 40.13408705037923 40.47, 116.23527736714453 40.134162096767966 40.34, 116.2352552998847 40.13419331616499 40.26, 116.23522664242158 40.13423374136985 40.19, 116.23518879879714 40.13428827480866 40.08, 116.23516094022496 40.134327499370315 40.02, 116.23515315178082 40.134338206217436 40.01, 116.23510702038857 40.13440244689625 39.91, 116.23507656573804 40.13444487379488 39.85, 116.23501915123302 40.134523924507356 39.74, 116.23498659972418 40.134568353274716 39.71, 116.23493118238048 40.134643902328826 39.59, 116.23490012872165 40.13468592983577 39.56, 116.23484541049838 40.1347600783976 39.48, 116.23481196049558 40.13480490808954 39.42, 116.2347562438746 40.134879457623846 39.35, 116.23472399213878 40.134922086297735 39.32, 116.23466937400401 40.13499443495665 39.25, 116.23463612389497 40.135038364620286 39.22, 116.23458060719781 40.13511081415106 39.17, 116.23454815594212 40.13515304314287 39.15, 116.23449453661144 40.13522299114498 39.12, 116.23445998857872 40.13526742206711 39.12, 116.23440287457339 40.13534057325135 39.06, 116.23437012390069 40.13538210261424 39.04, 116.23431271047467 40.135454754166325 39.02, 116.23427696447838 40.13550018634124 39.02, 116.2342206496235 40.13557133708173 38.99, 116.23418640148425 40.135614668000656 38.96, 116.23412729100342 40.135688521373666 38.93, 116.2340941412789 40.135729951361185 38.92, 116.23403642881772 40.13580120357739 38.89, 116.2340024803726 40.13584303433998 38.87, 116.23394386947226 40.135914987521076 38.83, 116.23390942186808 40.135956918799764 38.83, 116.23385021201584 40.136028672630154 38.77, 116.23381576447238 40.1360699039556 38.76, 116.23375655483791 40.13614135795286 38.69, 116.23368656175582 40.13622492185699 38.67, 116.23366150009389 40.13625484478065 38.66, 116.23362705279939 40.13629567629675 38.65, 116.2335664455895 40.13636693179199 38.62, 116.23353259752703 40.1364070628737 38.61, 116.2334654006275 40.13648542457216 38.57, 116.23343265096818 40.13652375471296 38.55, 116.2333714450715 40.136594511059485 38.52, 116.23333530070481 40.136636144381406 38.51, 116.2332754928505 40.136704699587305 38.48, 116.23323785095296 40.13674803441519 38.45, 116.2331750479065 40.1368192925331 38.44, 116.23314100054348 40.13685792409827 38.39, 116.23307889661602 40.136927781720296 38.37, 116.23304285245472 40.136968315224024 38.37, 116.23297905136549 40.13703947458278 38.34, 116.23294170930376 40.13708080936036 38.32, 116.23288080391845 40.13714806617189 38.28, 116.23284146509452 40.13719130291544 38.25, 116.23278075962877 40.137257959715654 38.22, 116.2327431182934 40.13729899497125 38.18, 116.23267782018671 40.1373699562259 38.16, 116.23263388881038 40.13741739749128 38.11, 116.23257288424678 40.13748325490289 38.07, 116.23253923692094 40.137519286595484 38.04, 116.23246475369479 40.137598956882506 37.96, 116.23243569924517 40.13762948429887 37.95, 116.23237169983183 40.137697644882095 37.89, 116.2323312634272 40.13774028319174 37.86, 116.232270059853 40.13780504130548 37.82, 116.23222872502217 40.137848380588366 37.79, 116.23217211442622 40.13790793450379 37.75, 116.23216542498388 40.13791484086935 37.75, 116.23212568783079 40.13795657878363 37.7, 116.23205759560713 40.13802744381526 37.65, 116.23202235145583 40.13806397752392 37.57, 116.23195855263664 40.138129638606195 37.48, 116.23191731810505 40.13817187814024 37.44, 116.2318524213339 40.138238640506906 37.36, 116.23181188585072 40.1382798794906 37.33, 116.23174639031821 40.138347042649954 37.28, 116.23170615452611 40.138387781472844 37.27, 116.23163926151527 40.13845614620188 37.25, 116.23160042366824 40.13849538380946 37.23, 116.23153792390859 40.13855914449832 37.2, 116.23149659026978 40.13860108468573 37.2, 116.23142849971647 40.13866985098414 37.15, 116.23138946254697 40.138709189057 37.12, 116.23132356872917 40.1387753534182 37.09, 116.23128243514144 40.138816893693594 37.07, 116.23127844157703 40.13882079759429 37.07, 116.23121843853458 40.13888085640481 37.07, 116.23117670608593 40.13892279739697 37.05, 116.23110871624885 40.138990664262806 37.03, 116.23106908052489 40.139029903284225 37.01, 116.23100288805404 40.139095668593235 37, 116.2309621543321 40.139136208864294 36.97, 116.2309160294518 40.1391819545178 36.95, 116.2308955628174 40.139202274800624 36.94, 116.23085572777286 40.139241514288315 36.92, 116.23078893688945 40.13930768065456 36.91, 116.2307468058099 40.13934932258645 36.89, 116.23069329345823 40.139402175929014 36.86, 116.23068171244036 40.13941358748345 36.86, 116.2306408794297 40.13945392826941 36.84, 116.23057299095743 40.13952089619483 36.83, 116.23053135948638 40.13956223795326 36.83, 116.23046327166271 40.139629306321716 36.81, 116.23042223937979 40.13966984761106 36.8, 116.23035914365832 40.13973221121553 36.77, 116.23031681370452 40.13977395395284 36.74, 116.23024992452875 40.13983972159017 36.7, 116.23020909234098 40.139880363001986 36.68, 116.23017205387563 40.13991690058266 36.67, 116.23014250303684 40.139946230616935 36.65, 116.23010017345273 40.13998767363418 36.62, 116.23001860950203 40.14006865680467 36.6, 116.22958923042418 40.140493798217776 36.4, 116.229563673556 40.14051882465874 36.39, 116.22949818434331 40.14058399261601 36.38, 116.22945455819139 40.1406269379199 36.36, 116.22941023336017 40.14067098405548 36.33, 116.22936900331707 40.14071162699646 36.32, 116.22930481239321 40.14077499397327 36.29, 116.22926198531417 40.140817638772056 36.28, 116.22919679640933 40.14088210703598 36.26, 116.22915606593772 40.140922549775894 36.23, 116.22909257440547 40.140985116463035 36.22, 116.22906162738138 40.141015949049766 36.23)" + renderEntity.code = + "{\"kind\":7,\"linkOrPa\":1,\"linkPid\":\"148077295492871682\",\"mesh\":\"20596659\"}" + Log.e("qj", "test==${++dataIndex}") + realm.insert(renderEntity) + } + realm.commitTransaction()*//* + realm.close() + } + Log.e("qj", "test===结束") + }*/ + loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) } @@ -358,23 +399,18 @@ class LoginViewModel @Inject constructor( if (!userAttachmentFolder.exists()) userAttachmentFolder.mkdirs() // 初始化Realm Realm.init(context.applicationContext) - val password = "encryp".encodeToByteArray().copyInto(ByteArray(64)) // 656e6372797000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - Log.d("OMQSApplication", "密码是: ${byteArrayToHexString(password)}") val config = RealmConfiguration.Builder() .directory(userFolder) .name("OMQS.realm") - .encryptionKey(password) + .encryptionKey(Constant.PASSWORD) .allowQueriesOnUiThread(true) -// .modules(Realm.getDefaultModule(), MyRealmModule()) .schemaVersion(2) .build() Realm.setDefaultConfiguration(config) // 拷贝配置文件到用户目录下 val omdbConfigFile = File(userFolder.absolutePath, Constant.OMDB_CONFIG); -// if (!omdbConfigFile.exists()) { ResourceUtils.copyFileFromAssets(Constant.OMDB_CONFIG, omdbConfigFile.absolutePath) -// } } /** diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index adc72ce8..74a6e62c 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -51,6 +51,7 @@ import com.navinfo.omqs.util.SoundMeter import com.navinfo.omqs.util.SpeakMode import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm +import io.realm.RealmConfiguration import io.realm.RealmSet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.collectLatest @@ -302,6 +303,9 @@ class MainViewModel @Inject constructor( } sharedPreferences.registerOnSharedPreferenceChangeListener(this) MapParamUtils.setTaskId(sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)) + Constant.currentSelectTaskFolder = File(Constant.USER_DATA_PATH +"/${MapParamUtils.getTaskId()}") + Constant.currentSelectTaskConfig = RealmConfiguration.Builder().directory(Constant.currentSelectTaskFolder).name("OMQS.realm").encryptionKey(Constant.PASSWORD).allowQueriesOnUiThread(true).schemaVersion(2).build() + MapParamUtils.setTaskConfig(Constant.currentSelectTaskConfig) socketServer = SocketServer(mapController, traceDataBase, sharedPreferences) } @@ -316,6 +320,7 @@ class MainViewModel @Inject constructor( if (res != null) { currentTaskBean = realm.copyFromRealm(res) } + realm.close() } @@ -337,9 +342,10 @@ class MainViewModel @Inject constructor( val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { val objects = - realmOperateHelper.getRealmTools(QsRecordBean::class.java, false).findAll() + realmOperateHelper.getRealmTools(QsRecordBean::class.java).findAll() list = realm.copyFromRealm(objects) } + realm.close() mapController.markerHandle.removeAllQsMarker() for (item in list) { mapController.markerHandle.addOrUpdateQsRecordMark(item) @@ -354,11 +360,11 @@ class MainViewModel @Inject constructor( var list = mutableListOf() val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { - val objects = realmOperateHelper.getRealmTools(NoteBean::class.java, false).findAll() + val objects = realmOperateHelper.getRealmTools(NoteBean::class.java).findAll() list = realm.copyFromRealm(objects) } - + realm.close() for (item in list) { mapController.markerHandle.addOrUpdateNoteMark(item) @@ -607,10 +613,10 @@ class MainViewModel @Inject constructor( } - val realm = realmOperateHelper.getRealmDefaultInstance() + val realm = realmOperateHelper.getSelectTaskRealmInstance() val entity = - realmOperateHelper.getRealmTools(RenderEntity::class.java, true) + realmOperateHelper.getSelectTaskRealmTools(RenderEntity::class.java, true) .and() .equalTo("table", DataCodeEnum.OMDB_RESTRICTION.name) .and() @@ -620,7 +626,7 @@ class MainViewModel @Inject constructor( if (entity != null) { val outLink = entity.properties["linkOut"] val linkOutEntity = - realmOperateHelper.getRealmTools(RenderEntity::class.java, true) + realmOperateHelper.getSelectTaskRealmTools(RenderEntity::class.java, true) .and() .equalTo("table", DataCodeEnum.OMDB_RD_LINK.name).and() .equalTo( @@ -633,6 +639,7 @@ class MainViewModel @Inject constructor( ) } } + realm.close() } liveDataTopSignList.postValue(topSignList.distinctBy { it.name } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt index f4ca7e33..41be9a3f 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt @@ -37,6 +37,7 @@ class ConsoleViewModel @Inject constructor() : ViewModel() { liveDataTaskCount.postValue(count.toInt()) val count2 = realm.where(QsRecordBean::class.java).count() liveDataEvaluationResultCount.postValue(count2.toInt()) + realm.close() } } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt index f1dd7848..16168314 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt @@ -162,7 +162,6 @@ class EvaluationResultViewModel @Inject constructor( if (objects != null) { liveDataTaskBean.postValue(realm.copyFromRealm(objects)) } - //获取当前定位点 val geoPoint = mapController.locationLayerHandler.getCurrentGeoPoint() //如果不是从面板进来的 @@ -204,6 +203,7 @@ class EvaluationResultViewModel @Inject constructor( getClassTypeList(bean) getProblemLinkList() + realm.close() } addChatMsgEntity(filePath) } @@ -412,6 +412,7 @@ class EvaluationResultViewModel @Inject constructor( } mapController.markerHandle.addOrUpdateQsRecordMark(liveDataQsRecordBean.value!!) liveDataFinish.postValue(true) + realm.close() } } @@ -435,6 +436,7 @@ class EvaluationResultViewModel @Inject constructor( mapController.markerHandle.removeQsRecordMark(liveDataQsRecordBean.value!!) mapController.mMapView.vtmMap.updateMap(true) liveDataFinish.postValue(true) + realm.close() } } }) @@ -495,6 +497,7 @@ class EvaluationResultViewModel @Inject constructor( } else { liveDataToastMessage.postValue("数据读取失败") } + realm.close() } } @@ -665,6 +668,7 @@ class EvaluationResultViewModel @Inject constructor( if (objects != null) { liveDataTaskBean.postValue(realm.copyFromRealm(objects)) } + realm.close() } } else { liveDataFinish.postValue(true) diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/note/NoteViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/note/NoteViewModel.kt index 5a5d7d84..f44c1127 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/note/NoteViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/note/NoteViewModel.kt @@ -117,6 +117,7 @@ class NoteViewModel @Inject constructor( } mapController.markerHandle.addOrUpdateNoteMark(mNoteBean!!) liveDataFinish.postValue(true) + realm.close() } } } @@ -145,6 +146,7 @@ class NoteViewModel @Inject constructor( } mapController.markerHandle.removeNoteMark(mNoteBean!!) liveDataFinish.postValue(true) + realm.close() } } mDialog.setNegativeButton("取消", null) @@ -168,6 +170,7 @@ class NoteViewModel @Inject constructor( canvasView.setDrawPathList(list) } } + realm.close() } } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterViewModel.kt index 6d4ab7ba..0efe575e 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterViewModel.kt @@ -43,7 +43,6 @@ class PersonalCenterViewModel @Inject constructor( @RequiresApi(Build.VERSION_CODES.N) suspend fun obtainOMDBZipData(importOMDBHelper: ImportOMDBHelper) { Log.d("OMQSApplication", "开始生成数据") -// Realm.getDefaultInstance().beginTransaction() val gson = Gson() val hadLinkFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_LINK.txt") val hadLinkKindFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_LINK_KIND.txt") @@ -135,14 +134,7 @@ class PersonalCenterViewModel @Inject constructor( hadSpeedLimitVarFile, gson.toJson(hadSpeedlimitVar) + "\r", true ) } -// val properties = RealmDictionary() -// for (entry in map.entries) { -// properties.putIfAbsent(entry.key, entry.value.toString()) -// } - -// // 将读取到的sqlite数据插入到Realm中 -// Realm.getDefaultInstance().insert(OMDBEntity(tableName, properties)) - } + } } } ZipUtils.zipFiles( diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt index 883081b7..bc23fe65 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt @@ -32,6 +32,7 @@ class QsRecordListViewModel @Inject constructor( val realm = Realm.getDefaultInstance() val objects = realm.where(QsRecordBean::class.java).equalTo("taskId",taskId).findAll() liveDataQSList.postValue(realm.copyFromRealm(objects)) + realm.close() } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklink/TaskLinkViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklink/TaskLinkViewModel.kt index 2f33032a..6fb382cc 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklink/TaskLinkViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklink/TaskLinkViewModel.kt @@ -123,6 +123,7 @@ class TaskLinkViewModel @Inject constructor( val realm = Realm.getDefaultInstance() val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst() liveDataTaskBean.postValue(res?.let { realm.copyFromRealm(it) }) + realm.close() } } @@ -234,6 +235,7 @@ class TaskLinkViewModel @Inject constructor( .putString(Constant.SHARED_SYNC_TASK_LINK_ID, hadLinkDvoBean!!.linkPid) .apply() liveDataFinish.postValue(true) + realm.close() } } @@ -302,6 +304,7 @@ class TaskLinkViewModel @Inject constructor( mapController.measureLayerHandler.initPathLine(hadLinkDvoBean?.geometry!!) } } + realm.close() } } @@ -354,6 +357,7 @@ class TaskLinkViewModel @Inject constructor( mapController.lineHandler.removeTaskLink(hadLinkDvoBean!!.linkPid) mapController.mMapView.vtmMap.updateMap(true) liveDataFinish.postValue(true) + realm.close() } } mDialog.setNegativeButton("取消", null) diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt index c318a621..af5cdd91 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt @@ -29,8 +29,10 @@ import com.navinfo.omqs.ui.dialog.FirstDialog import com.navinfo.omqs.util.DateTimeUtil import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm +import io.realm.RealmConfiguration import kotlinx.coroutines.* import org.oscim.core.GeoPoint +import java.io.File import javax.inject.Inject @@ -143,6 +145,7 @@ class TaskViewModel @Inject constructor( mapController.lineHandler.addTaskLink(hadLinkDvoBean) mapController.layerManagerHandler.updateOMDBVectorTileLayer() mapController.mMapView.vtmMap.updateMap(true) + realm.close() } } } @@ -218,6 +221,7 @@ class TaskViewModel @Inject constructor( } } + realm.close() } getLocalTaskList() } @@ -262,6 +266,7 @@ class TaskViewModel @Inject constructor( FileManager.checkOMDBFileInfo(item) } liveDataTaskList.postValue(taskList) + realm.close() val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) if (id > -1) { for (item in taskList) { @@ -290,6 +295,9 @@ class TaskViewModel @Inject constructor( liveDataTaskLinks.value = taskBean.hadLinkDvoList showTaskLinks(taskBean) MapParamUtils.setTaskId(taskBean.id) + Constant.currentSelectTaskFolder = File(Constant.USER_DATA_PATH +"/${MapParamUtils.getTaskId()}") + Constant.currentSelectTaskConfig = RealmConfiguration.Builder().directory(Constant.currentSelectTaskFolder).name("OMQS.realm").encryptionKey(Constant.PASSWORD).allowQueriesOnUiThread(true).schemaVersion(2).build() + MapParamUtils.setTaskConfig(Constant.currentSelectTaskConfig) mapController.layerManagerHandler.updateOMDBVectorTileLayer() mapController.mMapView.updateMap(true) @@ -383,6 +391,7 @@ class TaskViewModel @Inject constructor( realm.executeTransaction { r -> r.copyToRealmOrUpdate(it) } + realm.close() } } @@ -399,6 +408,7 @@ class TaskViewModel @Inject constructor( val list = realm.where(TaskBean::class.java).contains("evaluationTaskName", key).or() .contains("dataVersion", key).or().contains("cityName", key).findAll() liveDataTaskList.postValue(realm.copyFromRealm(list)) + realm.close() } } @@ -465,6 +475,7 @@ class TaskViewModel @Inject constructor( } liveDataTaskList.postValue(taskList) liveDataCloseTask.postValue(true) + realm.close() } } mDialog.setNegativeButton( @@ -507,6 +518,7 @@ class TaskViewModel @Inject constructor( map[taskBean] = true liveDataTaskUpload.postValue(map) } + realm.close() } } @@ -655,6 +667,7 @@ class TaskViewModel @Inject constructor( mapController.lineHandler.removeTaskLink(hadLinkDvoBean.linkPid) liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList) } + realm.close() } } mDialog.setNegativeButton( diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java index b9ba60de..01ec8393 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java @@ -39,12 +39,14 @@ public class OMDBReferenceDataSource implements ITileDataSource { int xEnd = (int) ((tile.tileX + 1) << m); int yStart = (int) tile.tileY << m; int yEnd = (int) ((tile.tileY + 1) << m); + + if(isUpdate){ - Realm.getDefaultInstance().refresh(); + Realm.getInstance(MapParamUtils.getTaskConfig()).refresh(); isUpdate = false; } - String sql = "taskId="+ MapParamUtils.getTaskId() +" and tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + ""; + String sql = " tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + ""; if(MapParamUtils.getDataLayerEnum()!=null){ sql += " and enable" + MapParamUtils.getDataLayerEnum().getSql(); @@ -52,7 +54,7 @@ public class OMDBReferenceDataSource implements ITileDataSource { sql += " and 1=1"; } - RealmQuery realmQuery = Realm.getDefaultInstance().where(ReferenceEntity.class) + RealmQuery realmQuery = Realm.getInstance(MapParamUtils.getTaskConfig()).where(ReferenceEntity.class) .rawPredicate(sql); // 筛选不显示的数据 if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) { @@ -67,7 +69,7 @@ public class OMDBReferenceDataSource implements ITileDataSource { mThreadLocalDecoders.get().decode(tile.zoomLevel, tile, mapDataSink, listResult); } mapDataSink.completed(QueryResult.SUCCESS); -// Log.d("RealmDBTileDataSource", "tile:"+tile.getBoundingBox().toString()); + Realm.getInstance(MapParamUtils.getTaskConfig()).close(); } else { mapDataSink.completed(QueryResult.SUCCESS); } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java index e5720e14..b06dca9a 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java @@ -38,12 +38,13 @@ public class OMDBTileDataSource implements ITileDataSource { int xEnd = (int) ((tile.tileX + 1) << m); int yStart = (int) tile.tileY << m; int yEnd = (int) ((tile.tileY + 1) << m); + if(isUpdate){ - Realm.getDefaultInstance().refresh(); + Realm.getInstance(MapParamUtils.getTaskConfig()).refresh(); isUpdate = false; } - String sql = "taskId="+ MapParamUtils.getTaskId() +" and tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + ""; + String sql =" tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd + ""; if(MapParamUtils.getDataLayerEnum()!=null){ sql += " and enable" + MapParamUtils.getDataLayerEnum().getSql(); @@ -51,7 +52,7 @@ public class OMDBTileDataSource implements ITileDataSource { sql += " and 1=1"; } - RealmQuery realmQuery = Realm.getDefaultInstance().where(RenderEntity.class).rawPredicate(sql); + RealmQuery realmQuery = Realm.getInstance(MapParamUtils.getTaskConfig()).where(RenderEntity.class).rawPredicate(sql); // 筛选不显示的数据 if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) { realmQuery.beginGroup(); @@ -65,6 +66,7 @@ public class OMDBTileDataSource implements ITileDataSource { mThreadLocalDecoders.get().decode(tile.zoomLevel, tile, mapDataSink, listResult); } mapDataSink.completed(QueryResult.SUCCESS); + Realm.getInstance(MapParamUtils.getTaskConfig()).close(); } else { mapDataSink.completed(QueryResult.SUCCESS); } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/RealmDBTileDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/RealmDBTileDataSource.java index fe5546b3..279a799f 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/RealmDBTileDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/RealmDBTileDataSource.java @@ -54,6 +54,7 @@ public class RealmDBTileDataSource implements ITileDataSource { List listResult = realmQuery.distinct("id").findAll(); mThreadLocalDecoders.get().decode(tile, mapDataSink, listResult); mapDataSink.completed(QueryResult.SUCCESS); + Realm.getDefaultInstance().close(); // Log.d("RealmDBTileDataSource", "tile:"+tile.getBoundingBox().toString()); } else { mapDataSink.completed(QueryResult.SUCCESS); diff --git a/collect-library/src/main/java/com/navinfo/collect/library/utils/MapParamUtils.java b/collect-library/src/main/java/com/navinfo/collect/library/utils/MapParamUtils.java index 79e7675e..3cfd5932 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/utils/MapParamUtils.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/utils/MapParamUtils.java @@ -2,20 +2,33 @@ package com.navinfo.collect.library.utils; import com.navinfo.collect.library.enums.DataLayerEnum; +import java.io.File; + +import io.realm.RealmConfiguration; + public class MapParamUtils { private static int mtaskId = -1; + private static RealmConfiguration mTaskConfig = null; + private static DataLayerEnum dataLayerEnum = DataLayerEnum.ONLY_ENABLE_LAYERS; public static int getTaskId() { return mtaskId; } - public static void setTaskId(int taskId) { mtaskId = taskId; } + public static RealmConfiguration getTaskConfig() { + return mTaskConfig; + } + + public static void setTaskConfig(RealmConfiguration taskConfig) { + mTaskConfig = taskConfig; + } + public static DataLayerEnum getDataLayerEnum() { return dataLayerEnum; } diff --git a/vtm b/vtm index a087521b..3031b706 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit a087521b6e1b312d7ed2bdf20f83b0e674fad9b5 +Subproject commit 3031b70699d5d886834d75cc098466daa8cef118