错误“不能为null”在Kotlin中

有一个.zip文件中有多个文件,我正在尝试获取。 试图解压缩文件提供了一个java.lang.IllegalStateException:zis.nextEntry不能为null。 如何正确地做到这一点?

@Throws(IOException::class) fun unzip(zipFile: File, targetDirectory: File) { val zis = ZipInputStream( BufferedInputStream(FileInputStream(zipFile))) try { var ze: ZipEntry var count: Int val buffer = ByteArray(8192) ze = zis.nextEntry while (ze != null) { val file = File(targetDirectory, ze.name) val dir = if (ze.isDirectory) file else file.parentFile if (!dir.isDirectory && !dir.mkdirs()) throw FileNotFoundException("Failed to ensure directory: " + dir.absolutePath) if (ze.isDirectory) continue val fout = FileOutputStream(file) try { count = zis.read(buffer) while (count != -1) { fout.write(buffer, 0, count) count = zis.read(buffer) } } finally { fout.close() zis.closeEntry() ze = zis.nextEntry } } } finally { zis.closeEntry() zis.close() } } 

2 Solutions collect form web for “错误“不能为null”在Kotlin中”

从文件流中读取的ZipEntry在到达文件末尾时将为null ,因此您必须将variables存储为空,即:

 var ze: ZipEntry? 

您可以将您读取的值分配给不可为空的variables,因为他们的平台types为ZipEntry! ,因为它是一个Java API – 在这种情况下,你必须确定它是否可以为null 。 有关更多信息,请参阅有关平台types的文档 。

你可以像这样var ze: ZipEntry定义variablesze 。 所以这个types是ZipEntry而不是ZipEntry? (可空types)。

如果你通过var ze: ZipEntry?更改var ze: ZipEntry var ze: ZipEntry? ,variables可以为null。

您可以检查文档的空安全性 。 这是Kotlin的大事之一。

  • 使用android从图像背景中检测颜色
  • 信号7(SIGBUS),代码2(BUS_ADRERR)
  • 使用默认值推断类types的参数
  • 用Kotlin完成另一个Android的活动
  • 将android hashmap转换为kotlin
  • Android Kotlin类实现的问题
  • Android WebView - JWT身份validation
  • 如何写while循环与在kotlin中的responseInputStream.read - (while((i = responseInputStream.read(byteContainer))
  • lateinit属性主持人还没有被EasyMVP,Robolectric和Kotlin初始化
  • 返回值没有设置
  • 如何清除焦点和删除Android上的键盘?
  • Kotlin language will be the best programming language for Android.