Necesito enviar una solicitud POST a un servidor. Se supone que debo pasar algunos parámetros y una imagen. Puedo hacer esto desde Postman, pero no puedo hacerlo en mi aplicación de Android (SDK más reciente) usando Fuel.
Este es el código que estoy usando:
val formData = listOf("name" to "name") val (_, _, result) = Fuel.upload("http://10.0.2.2:3000/test", parameters = formData) .source { request, url -> imageFile } // type is File .responseObject<CustomResponse>() Esta es la captura de pantalla del cartero: 
No tengo acceso al código de back-end, solo algunos registros. Parece que el cuerpo de la solicitud está vacío y el archivo tampoco se carga. ¿Cómo puedo hacer esto? Estoy perdido.
También intenté pasar los parámetros como jsonBody, esto envía el cuerpo, pero el tipo de contenido no es multipart/form-data y aún falta la imagen.
Este código JS funciona :
let formData = new FormData(); formData.append('name', 'name'); formData.append('image', this.file); axios.post(`${API_URL}/test`, formData, { headers: { 'Content-Type': 'multipart/form-data' } }).then(console.log).catch(console.log)Editar: también intenté pasar el archivo como DataPart, todavía nada.
Después de un poco de lucha, descubrí lo que funcionaría:
val file = FileDataPart.from("path_to_your_file", name = "image") val (_, _, result) = Fuel.upload("http://10.0.2.2:3000/test") .add(file) .responseObject<CustomResponse>()No necesitaba la parte de nombre-nombre en mi caso, pero intentaría agregar InlineDataPart
Después de algunos intentos finalmente encontré la solución. Prueba esto, creo que te ayudará.
val params = listOf("email" to "test@email.com", "pass" to "123456") Fuel.upload("http://your-api-url.com/login", Method.POST, params) .responseString { _, _, result -> when (result) { is Result.Failure -> { print(result.getException().toString()) } is Result.Success -> { val data = result.get() print(data) } } }Logré enviar una solicitud POST a un servidor. Pasé un parámetro y una imagen.
//Prepare POST body val postBody = listOf("name" to "name") //Call the API. val (_, _, result) = Fuel.upload("http://10.0.2.2:3000/test", Method.POST , postBody) .add(BlobDataPart(myInputStream, name = "image", filename = "default.jpg", contentType = "image/jpeg")) .responseString() //If failed, then print exception. If successful, then print result. when (result) { is Result.Failure -> { println(result.getException()) } is Result.Success -> { println(result.get()) } }Puede leer la documentación relacionada aquí .