Исключение Android - ArrayIndexOutOfBoundsException kotlin, когда я пишу в файл - PullRequest
0 голосов
/ 20 мая 2019

Я получаю такую ​​ошибку при сбое моего приложения:

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)

возможно, это происходит потому, что я неправильно преобразовал цикл while из Java. В Java у меня было что-то вроде этого:

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

Я нашел это обращение к моей проблеме и создал свой собственный новый цикл while, но, как я вижу, я что-то сделал не так. Почему это происходит и как я могу решить эту проблему?

UPDATE

вот еще один способ решения моей проблемы, который был предложен:

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

фото не загружается в память

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Не уверен, что именно, как именно ты печатаешь. Вот способ, который я использую в своем приложении для записи текста в файл.

  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
           }
     }
1 голос
/ 20 мая 2019

Проблема в самом цикле.

-1 возвращается, когда данных больше нет

Do while {} выполняется хотя бы один раз, поэтому при отсутствии данных у вас будет эта ошибка. While {} сначала проверяет условие, а затем выполняет. В Java вы использовали while, здесь, в Kotlin, вы использовали do while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...