#android #arrays #kotlin
#Android #массивы #kotlin
Вопрос:
Мне нужно выбрать PDF-файл из локального хранилища и преобразовать его в ByteArray для пути к базе данных firebase. Я много искал, но ответа на этот вопрос не было.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(requestCode == RC_SELECT_PDF amp;amp; resultCode == Activity.RESULT_OK amp;amp;
data != null amp;amp; data.data != null) {
val hereUrl:Uri = data.data
var os = ByteArrayOutputStream()
var inputStream = this@RegistrasiPengajarActivity?.contentResolver.openInputStream(hereUrl)
var byteArray = inputStream.available()
}
}
это все, что я могу сделать, я выбрал pdf, но до сих пор не знаю, как его преобразовать
Ответ №1:
Kotlin (начиная с 1.3) предоставляет метод расширения InputStream.readBytes()
для чтения всех байтов из an InputStream
в a ByteArray
.
В вашем случае используйте:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(requestCode == RC_SELECT_PDF amp;amp; resultCode == Activity.RESULT_OK amp;amp;
data != null amp;amp; data.data != null){
val hereUrl:Uri = data.data
var os = ByteArrayOutputStream()
var inputStream = this@RegistrasiPengajarActivity?.contentResolver.openInputStream(hereUrl)
var byteArray = inputStream.readBytes()
}
}
Ответ №2:
Попробуйте это:
var iStream = getContentResolver().openInputStream(uri)
var inputData = getBytes(iStream)
@Throws(IOException::class)
fun getBytes(inputStream:InputStream):ByteArray {
val byteBuffer = ByteArrayOutputStream()
val bufferSize = 1024
val buffer = ByteArray(bufferSize)
val len = 0
while ((len = inputStream.read(buffer)) != -1)
{
byteBuffer.write(buffer, 0, len)
}
return byteBuffer.toByteArray()
}
Комментарии:
1.
len = inputStream.read(buffer)) != -1
вызывая бесконечный цикл2. val buffer = byteArrayOf()[1024] Используйте это вместо val buffer = ByteArray(bufferSize)