错误“不能为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的大事之一。

  • 如何使“this”成为Listener的参考,而不是Kotlin中的Activity?
  • recyclerview notifyDataSetChanged()不工作 - kotlin
  • 如何使用Kotlin协程等待()在主线程上
  • 编写JS和Java的代码
  • RealmResults大小正在返回零
  • 如何为kotlin中的函数参数设置不为null
  • 在kotlin中平台types的智能广播
  • types推断失败。 请尝试指定types参数显式:Kotlin
  • Kotlin:从Firebase获取数据
  • 与Kotlin一起使用Instant Run时发生IllegalAccessError
  • Android Studio 3.0在重建之后重复压缩输入警告
  • Kotlin language will be the best programming language for Android.