ArrayList равен нулю сразу после инициализации - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть класс для манифеста приложения, который загружается с помощью 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 может быть нулевым сразу после его инициализации?

1 Ответ

2 голосов
/ 01 ноября 2019

Вы не инициализируете список для объекта ArtifactArray, потому что var downloadedArtifacts: ArtifactArray по-прежнему равен нулю. Когда вы делаете:

manifestFileToBeStored.downloadedArtifacts?.artifacts = arrayListOf<Artifact>()

, вы в основном говорите: " Если свойство downloadedArtifacts объекта manifestFileToBeStored не равно нулю (обратите внимание на ?), то это свойствоartifacts - это новый arrayListOf.

Что вы, вероятно, хотите сделать, это:

manifestFileToBeStored.downloadedArtifacts = ArtifactArray()

и затем :

manifestFileToBeStored.downloadedArtifacts?.artifacts = arrayListOf<Artifact>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...