Кажется, вы ничего не передаете в свою функцию для sendtoFirebase
. Я публикую код, который я сделал для успешной загрузки.
вы сначала смотрите на сжатие, поэтому вам это понадобится;
private fun compressBitmap(bitmap: Bitmap, quality: Int): Bitmap {
val stream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.WEBP,quality,stream)
val byteArray = stream.toByteArray()
arrayByte = byteArray
uploadFile(arrayByte)
return BitmapFactory.decodeByteArray(byteArray,0,byteArray.size)
}
в приведенном выше, uploadFile
- это вызов базы данных загрузить. Я передаю сжатое растровое изображение в функцию. функционал для загрузки выглядит следующим образом:
ниже mImageURI
- это сопутствующий объект, который является частью URI, переданного для сжатия. вы можете удалить оператор if ниже, если не хотите выполнять проверку.
private fun uploadFile(data:ByteArray) {
if (mImageUri != null){
val storageref = imageref.child("put your image id here")
storageref.putBytes(data).addOnSuccessListener {
Handler().postDelayed({
progressbar.setProgress(0)
Toast.makeText(activity, "Upload Successful", Toast.LENGTH_LONG).show()
}
, 1000)
}.addOnFailureListener{e->
Toast.makeText(activity,e.message,Toast.LENGTH_LONG).show()
}.addOnProgressListener {taskSnapshot ->
val progress = (100.0 * taskSnapshot.bytesTransferred/taskSnapshot.totalByteCount)
progressbar.setProgress(progress.toInt())
}
}
else if(mImageUri == null) {
Toast.makeText(activity,"No File Selected",Toast.LENGTH_LONG).show()
}
}
. Индикатор выполнения выше не требуется. это просто приятная визуализация для пользователя, который должен видеть прогресс загрузки, если файл большой.
вам действительно нужно только убедиться, что вы передаете data
в .putbytes
Изменить: для вашего результата onActivity, если ваш код похож на мой, используйте;
переопределить удовольствие onActivityResult (requestCode: Int, resultCode: Int, data: Intent?) {Super.onActivityResult (requestCode, resultCode , data)
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
&& data != null && data.getData() != null) {
mImageUri = data.getData()!!
image1.setImageURI(data.getData())
}
}
на изображении выше 1 - это imageView на текущей странице для отображения выбранного изображения.
Надеюсь, это поможет