Solution 1 :
data?.data
resolves to either a Uri
or null
. Kotlin treats null
as being part of the type system, so the inferred type is Uri?
(?
indicating that the value might be null
). However, openInputStream()
does not support null
. So, you need to check to see if imageUri
is null
and, if it is, do not try to use it.
For example, you could use a safe call (?.
) with let()
:
data?.data?.let { imageUri ->
val imageStream = contentResolver.openInputStream(imageUri)
val selectedImage = BitmapFactory.decodeStream(imageStream)
profile_page_pimage.setImageBitmap(selectedImage)
}
Now, if you did not get a Uri
from data?.data
, you will not crash when trying to read in the non-existent content.
Solution 2 :
You need to add the null-safety mark !! , so your code you should be like ths
val imageStream = contentResolver.openInputStream(imageUri!!)
Problem :
I get an error message:
required type Uri
found Uri?
My code:
val imageUri = data?.data
val imageStream = contentResolver.openInputStream(imageUri)
val selectedImage = BitmapFactory.decodeStream(imageStream)
profile_page_pimage.setImageBitmap(selectedImage)
Comments
Comment posted by Kürşat
I tried but now I get this error
Comment posted by CommonsWare
@Kürşat: That would need to be inside the
Comment posted by CommonsWare
If
Comment posted by Taki
i guess it won’t because there is null safety ? in data?.data , so in this case i guess it won’t crash because the null safety mark ? will prevent the app from crash even if the value is null
Comment posted by CommonsWare
No.
Comment posted by Taki
Alright , i could be wrong , i just looked at it like if imageUri returns null safety like in data?.data , something like this var imageUri : Uri? = data?.data
Comment posted by CommonsWare
Yes, but