【发布时间】:2020-08-20 04:37:21
【问题描述】:
我正在开发一个应用程序,我可以在其中为 recyclerview(recyclerview 后面的 imageview)选择背景。从图库中选择图像后,我想将其发送到 firebase。但是,当我上传图片时,我的应用程序冻结了,我无法滚动 recyclerview
我的代码:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK) {
/* code */
else if (requestCode == BG_GALLERY_REQUEST_CODE) {
val selectedPicture = data?.data
val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
val cursor = applicationContext.contentResolver.query(selectedPicture!!, filePathColumn, null, null, null)
cursor!!.moveToFirst()
val columnIndex = cursor.getColumnIndex(filePathColumn[0])
val picturePath = cursor.getString(columnIndex)
val bitmap = BitmapFactory.decodeFile(picturePath)
cursor.close()
backgroundUtils.salvarBackground(bitmap)
val byteArrayOutputStream = ByteArrayOutputStream()
bitmap?.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream)
val dadosImagem = byteArrayOutputStream.toByteArray()
val storageReference = ConfiguracaoFirebase.getFirebaseStorage()
val imagemRef = storageReference
.child("imagens")
.child("backgrounds")
.child(UsuarioFirebase.getId() +
FileUtils.IMAGE_EXTENSION)
val uploadTask = imagemRef.putBytes(dadosImagem)
uploadTask.addOnSuccessListener {
imagemRef.downloadUrl.addOnSuccessListener { uri ->
ConfiguracaoFirebase.backgroundRef()
.child(UsuarioFirebase.getId())
.setValue(uri)
Log.e("upload", uri.toString())
}
}.addOnFailureListener { exception ->
Log.e("upload", exception.message)
}
}
} else if (resultCode == Activity.RESULT_CANCELED) {
Log.i("REQUEST", "canceled")
} else {
toast(getString(R.string.oops_ocorreu_algum_erro))
}
}
我也尝试在 AsyncTask 中执行上传代码,但问题仍然存在。如何解决这个错误?
提前致谢
【问题讨论】:
-
大概
putBytes是个阻塞函数吧? -
我认为,这是线程的原因。从这里了解更多关于线程的信息developer.android.com/reference/java/lang/Thread
标签: android firebase kotlin firebase-storage