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>()
我有一个 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>()