У меня есть класс для манифеста приложения, который загружается с помощью Retrofit и хранится локально:
class ArtifactArray {
@Expose
@SerializedName("artifacts")
var artifacts: ArrayList<Artifact>? = null
}
class ManifestFile {
var lastUpdate: Long? = null
@Expose
@SerializedName("device_id")
var deviceId: String = ""
@Expose
@SerializedName("device_ip")
var deviceIp: String = ""
@Expose
@SerializedName("artifacts")
var artifactsToBeDownloaded: ArrayList<Artifact>? = null
@Expose
@SerializedName("active")
var activeArtifacts: ArtifactArray? = null
@Expose
@SerializedName("downloaded")
var downloadedArtifacts: ArtifactArray? = null
}
Обратите внимание, что при извлечении объекта из серверной части свойства "activeArtifacts" и "loadedArtifacts "нетЭти поля используются только для локальных экземпляров этого объекта. Не уверен, что это актуально или нет.
После загрузки объекта я пытаюсь взять объекты из артефакта ToBeDownloaded ArrayList
и поместить их в загруженные артефакты ArrayList
:
manifestFileToBeStored.downloadedArtifacts?.artifacts = arrayListOf<Artifact>()
AppLog.i(TAG,"saveManifestFileToLocal() - Is downloaded artifacts array null [${manifestFileToBeStored.downloadedArtifacts?.artifacts == null}]")
for (artifact in manifestFileToBeStored.artifactsToBeDownloaded!!){
AppLog.i( TAG,"saveManifestFileToLocal() - Type of artifact to be downloaded[${artifact.type}]")
manifestFileToBeStored.downloadedArtifacts?.artifacts?.add(artifact)
}
Несмотря на то, что список загруженных артефактов был инициализирован непосредственно перед этим, в этом первом операторе журнала возвращается ноль. Список, из которого добавляются элементы, полон, и значения возвращаются в этом втором операторе журнала. Как ArrayList может быть нулевым сразу после его инициализации?