当我的应用崩溃时,我会收到这样的错误:
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))
}
它不会将照片加载到内存中
答案 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
}
}