ArrayList 初始化后立即为 null

ArrayList is null immediately after initialization

我有一个 class 应用程序清单,它是使用 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" 和 "downloadedArtifacts" 属性不存在。这些字段仅用于该对象的本地实例。不确定这是否相关。

下载对象后,我尝试从 artifactsToBeDownloaded ArrayList 中取出对象并将它们放入 downloadedArtifacts 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)

    }

尽管之前已立即初始化,但第一个日志语句中的已下载工件列表 returns 为空。从中添加项目的列表已满,并且在第二个日志语句中返回了值。 ArrayList如何初始化后立即为null?

您没有在 ArtifactArray 对象上初始化列表,因为 var downloadedArtifacts: ArtifactArray 仍然为空。 当你这样做时:

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

你基本上说:“如果对象manifestFileToBeStored的属性downloadedArtifacts不为空(注意?), 那么就是 属性 artifacts 是新的 arrayListOf.

您可能想要做的是:

manifestFileToBeStored.downloadedArtifacts = ArtifactArray()

然后

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