Retrofit 2 La solicitud POST multipart envía cotizaciones extra a PHP
Con Retrofit 2.0.1, hay una función de llamada en mi interfaz de API definida en la aplicación para Android:
@Multipart @POST("api.php") Call<ResponseBody> doAPI( @Part("lang") String lang, @Part("file\"; filename=\"image.jpg") RequestBody file );
Puedo enviar la solicitud como esta:
- La llamada a la API de Retrofit recibe "HTTP FAILED: java.io.IOException: Cancelled"
- Cómo hacer una solicitud múltiple y esperar hasta que los datos provengan de todas las solicitudes en retrofit 2.0 - android
- Hacer sucesivas llamadas de api con Retrofit y devolver observable
- Subir archivo en Retrofit 2
- Mejor manera de esperar a que retrofit2 termine antes de continuar async
Llamada call = service.doAPI ("eng", imageFile);
Donde imageFile
es un RequestBody
creado con un objeto File
. La parte de la imagen de subida no tiene ningún problema, mientras que la @Part("lang") String lang
la @Part("lang") String lang
del @Part("lang") String lang
consiguió cotizaciones adicionales en servidor.
En el lado de PHP, se escribe como sigue:
$lang = trim($_POST['lang']);
Que devuelve "eng"
. ¿Por qué hay una cita doble extra rodeada de la cadena?
Por supuesto puedo quitar las cotizaciones dobles de arrastre y de salida, pero es extraño hacerlo
Problema relacionado: https://github.com/square/retrofit/issues/1210
- Cómo resolver java.lang.AssertionError al crear OkHttpClient en mockito?
- Retrofit2 + SimpleXML en Kotlin: MethodException: La anotación debe marcar un método set o get
- Retrofit "Autorización", "Portador" + token
- Parámetro de reequipamiento
- ProGuard para Android y Retrofit2 Converter Gson?
- Retrofit2 enviar un método de solicitud PUT es incorrecto para PHP
- ¿Por qué Retrofit se utiliza con RxJava
- ¿Es posible la llamada a SOAP webservice usando Retrofit?
Para su problema, utilice como documentación
Escalares (primitivos, encasillados y String): com.squareup.retrofit2: convertidor-escalares
Por lo tanto, agregar la compile 'com.squareup.retrofit2:converter-scalars:2.0.1'
en el archivo build.gradle
Entonces…
Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL_BASE) .addConverterFactory(ScalarsConverterFactory.create()) //.addConverterFactory(GsonConverterFactory.create()) .build();
¡Espero eso ayude!