Android Studio中如何让List字段返回空列表[]?
问题解决:构建API请求体时返回空列表的正确写法
你当前的问题出在updateDeviceList的构建逻辑上:用List(dbInfo.equipmentList.size) { ... }生成的列表会包含所有循环产生的元素,不符合条件时返回的Unit会混入列表,后续的强制类型转换不仅不安全,也无法得到你想要的空列表。
解决方案
直接使用mapNotNull遍历设备列表,只保留符合条件的ApiUpdateDeviceList实例,不符合条件的返回null,mapNotNull会自动过滤掉所有null值,最终自然得到空列表(当没有符合条件的元素时)。
修改后的代码片段
将updateDeviceList的构建代码替换为:
updateDeviceList = dbInfo.equipmentList.mapNotNull { equipmentItem -> val dbEquipmentInfo = equipmentItem.sSEquipmentDbInfo Log.d("UpdatingSiteSurvey", "UpdateDeviceListDB $dbEquipmentInfo") val secondaryDeviceCheckedStatus = dbEquipmentInfo.secondaryDeviceCheckedStatus val isDuplicateDeviceInUpdatePhase = dbEquipmentInfo.isDeviceUpdateMode if (secondaryDeviceCheckedStatus == CHECKED_YES && isDuplicateDeviceInUpdatePhase) { ApiUpdateDeviceList( deviceEquipmentId = dbEquipmentInfo.deviceEquipmentId, secondaryDeviceId = dbEquipmentInfo.secondaryDeviceId, deviceInstanceId = dbEquipmentInfo.deviceInstanceId.toString(), deviceSerialNumber = dbEquipmentInfo.deviceSerialNumber, devicePartNumber = dbEquipmentInfo.devicePartNumber, deviceManufacturerName = dbEquipmentInfo.deviceManufacturer, deviceInstallationDate = DateUtil.dateToStringUTCSiteSurvey(dbEquipmentInfo.deviceInstallationDate), deviceLocation = dbEquipmentInfo.locationInfo, deviceTechnicianNotes = dbEquipmentInfo.deviceTechnicianNotes ).also { Log.d(TAG, "updateDeviceListRequestBodyAPI $it") } } else { // 不符合条件时返回null,mapNotNull会自动过滤 null } },
额外说明
mapNotNull是Kotlin标准库中专门处理这种“只保留有效元素”场景的函数,比手动构建列表再过滤更简洁高效。- 原代码中
newDeviceList的写法也存在类似问题(返回非ApiNewDeviceList类型的元素),建议同样改用mapNotNull来统一逻辑,避免类型转换错误。
内容的提问来源于stack exchange,提问作者OEThe11
相关产品推荐
相关产品推荐

