Android异常-写入文件时出现ArrayIndexOutOfBoundsException kotlin

时间:2019-05-20 05:05:32

标签: android kotlin

当我的应用崩溃时,我会收到这样的错误:

java.lang.ArrayIndexOutOfBoundsException: length=4096; regionStart=0; regionLength=-1

当我尝试从服务器下载照片时,我的应用程序崩溃了。它指向这一行:

do {
    val read = inputStream.read(buffer)
    outputStream.write(buffer, 0, read)//this line!!!!
}while (read!=-1)

可能是因为我从Java错误地转换了while循环而发生的。在Java中,我有这样的东西:

while ((read = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, read)
}

我发现this可以解决我的问题,并创建了自己的新while循环,但是我发现自己确实做错了。为什么会发生,如何解决这个问题?

更新

这是解决我的问题的另一种方法:

while (inputStream.read(buffer) != -1) {
   outputStream.write(buffer, 0, inputStream.read(buffer))
 }

它不会将照片加载到内存中

2 个答案:

答案 0 :(得分:1)

问题在循环本身中。

没有更多数据时将返回

-1

Do while {}至少执行一次,因此,如果没有数据,则会出现此错误。 While {}首先检查条件,然后执行。在Java中,您使用过while,而在Kotlin中,您则使用了while。

答案 1 :(得分:1)

不确定打印的精度如何。这是我在应用中使用的一种将文本写入文件的方法。

  try {
          val sub = File(Environment.getExternalStorageDirectory(), "/My Documents")
               if (!sub.exists())
                   sub.mkdirs()

               val txtFile = File(sub, "mTextFile.txt")
               val writer = FileWriter(txtFile)
               writer.append("My text")  //Append whatever text you want to write to a file.
               writer.flush()
               writer.close()

           } catch (e: FileSystemException) {
               e.printStackTrace()  //Handle exception properly
           }
     }