I'm trying to handle a LiveData
value (profilePicture: Bitmap
) within a BindingAdapter
function but the first value is always null. The binding adapter is a ViewSwitcher
with ProgressBar
and ImageView
.
Getting profile picture from firebase like this:
val downloadPictureResult = MutableLiveData<Bitmap>()
// ...
fun downloadProfilePic(): LiveData<Bitmap?> {
val imageRef = storage.getReference("images/$uid/profile/profile_picture.jpg")
imageRef.getBytes(ONE_MEGABYTE).addOnCompleteListener { task ->
if (task.isSuccessful) {
//...
downloadPictureResult.value = responseBitmap
//...
} else {
downloadPictureResult.value = null
Log.d(TAG, task.exception?.localizedMessage)
}
}
return downloadPictureResult;
}
Because the first value is null and the second the expected bitmap object, the view.showNext()
is called two times. But it's more important for me to understand why the firstvalue is null because the setProfilePicture
method will have some more logic.
BindingAdapter looks like this.
fun setProfilePicture(view: ViewSwitcher, profilePicture: Bitmap?) {
Log.d("PPSS", profilePicture.toString())
val imageView: ImageView = view[1] as ImageView
imageView.setImageDrawable(view.context.getDrawable(R.drawable.account_circle_24dp))
profilePicture.let { picture ->
if (picture != null) {
val rounded = RoundedBitmapDrawableFactory.create(view.resources, picture)
rounded.isCircular = true
imageView.setImageDrawable(rounded)
view.showNext()
} else {
view.showNext()
}
}
Log:
2019-04-13 17:53:01.658 11158-11158/... D/PPSS: null
2019-04-13 17:53:02.891 11158-11158/... D/PPSS: android.graphics.Bitmap@8b6ecb8
from BindingAdapter LiveData first value always null
No comments:
Post a Comment