es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Solicitud Retrofit @Part y @Query en Kotlin para Android

Quiero enviar una imagen como form-data y userId como parámetros en retrofit para Android. He intentado muchas soluciones pero no he tenido éxito. Aquí está mi código y la API:

@Multipart
@POST(“upload/profile”)
fun uploadProfilePhoto(@Part image: MultipartBody.Part, @Query(“userId”) userId: String): Call

val photoContent = RequestBody.create(MediaType.parse("image/*"), file)
val photo = MultipartBody.Part.createFormData("image", file.name, photoContent)

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para enviar una imagen como form-data y userId como parámetros en Retrofit Android, se puede utilizar el siguiente código:

    @Multipart
    @POST("upload/profile")
    fun uploadProfilePhoto(
        @Part image: MultipartBody.Part, 
        @Query("userId") userId: String
    ): Call<loginsignupgeneralresponse>
    

    Aquí, se utiliza la anotación @Multipart para indicar que el cuerpo de la solicitud consta de varias partes y la anotación @POST para especificar el método HTTP como POST.

    El parámetro image es un MultipartBody.Part que contiene los datos de la imagen, mientras que userId es el ID de usuario que se pasa como parámetro de consulta.

    Para crear el MultipartBody.Part para los datos de la imagen, se puede utilizar el siguiente código:

    val photoContent = RequestBody.create(MediaType.parse("image/*"), file)
    val photo = MultipartBody.Part.createFormData("image", file.name, photoContent)
    

    Aquí, RequestBody.create() se utiliza para crear un nuevo cuerpo de solicitud a partir del archivo de imagen y MultipartBody.Part.createFormData() se utiliza para crear una nueva parte a partir del cuerpo de la solicitud, con el nombre "image" y el nombre del archivo.

    Para llamar a la función uploadProfilePhoto() y pasar la imagen y userId como parámetros, se puede utilizar el siguiente código:

    val file = File("ruta_del_archivo_de_imagen")
    val photoContent = RequestBody.create(MediaType.parse("image/*"), file)
    val photo = MultipartBody.Part.createFormData("image", file.name, photoContent)
    
    val userId = "12345"
    
    val call = service.uploadProfilePhoto(photo, userId)
    call.enqueue(object : Callback<loginsignupgeneralresponse> {
        override fun onResponse(call: Call<loginsignupgeneralresponse>, response: Response<loginsignupgeneralresponse>) {
            // Manejar respuesta
        }
    
        override fun onFailure(call: Call<loginsignupgeneralresponse>, t: Throwable) {
            // Manejar error
        }
    })
    

    Aquí, service es la instancia del servicio Retrofit y call.enqueue() se utiliza para ejecutar la solicitud HTTP de forma asíncrona y recibir la respuesta.

Comments are closed.