registerForActivityResult y onActivityResult son términos de programación en Kotlin. – registerForActivityResult se traduce como “registrarse para recibir el resultado de una actividad”. – onActivityResult se traduce como “acción que se ejecuta una vez que se ha recibido el resultado de una actividad”.
Actualmente estoy tratando de aprender de un tutorial paso a paso para cargar una imagen o archivo en mi servidor mientras uso Volley. Este tutorial está un poco desactualizado y realmente no entiendo cómo puedo solucionar estos problemas.
El tutorial:
- ‘onActivityResult (Int, Int, Intent?): Unit’ está obsoleto. Obsoleto en Java.
-
El fragmento está intentando registrarse para recibirActivityResult después de haber sido creado. Los fragmentos deben llamar a registerForActivityResult() antes de ser creados (es decir, inicialización, onAttach() o onCreate()).
Mi código:
Kotlin
//Subiendo fotos
private fun launchGallery() {
val intent = Intent(Intent.ACTION_PICK)
intent.type = “image/*”
var resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
// No hay códigos de solicitud
val data: Intent? = result.data
}
}
}
private fun uploadImage() {
imageData ?: return
val request = object : VolleyFileUploadRequest(
Request.Method.POST,
postURL,
{
println(“la respuesta es: $ it”)
},
{
println(“el error es: $ it”)
}
) {
override fun getByteData(): MutableMap<string, filedatapart=””> {
var params = HashMap<string, filedatapart=””>()
params[“imageFile”] = FileDataPart(“image”, imageData!!, “jpeg”)
return params
}
}
Volley.newRequestQueue(requireContext()).add(request)
}
@Throws(IOException::class)
private fun createImageData(uri: Uri) {
val inputStream = requireContext().contentResolver.openInputStream(uri)
inputStream?.buffered()?.use {
imageData = it.readBytes()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && requestCode == IMAGE_PICK_CODE) {
val uri = data?.data
if (uri != null) {
imageView.setImageURI(uri)
createImageData(uri)
}
}
super.onActivityResult(requestCode, resultCode, data)
}</string,></string,>
davy.ai
Para solucionar la función obsoleta de
onActivityResult
, podemos reemplazarla con la nueva versión de la función que esregisterForActivityResult
.Para solucionar el segundo problema en el que el fragmento intenta registrarse para un resultado de actividad después de haber sido creado, podemos llamar a
registerForActivityResult
en el método de ciclo de vidaonCreate
oonViewCreated
.Código actualizado:
En esta actualización, hemos movido la variable
resultLauncher
fuera de la función y la hemos inicializado dentro del método de ciclo de vidaonViewCreated
. Luego, hemos reemplazado la función antiguaonActivityResult
con la nueva funciónresultLauncher.launch
dentro de la funciónlaunchGallery
. Finalmente, hemos eliminado la función antiguaonActivityResult
.</string,></string,>