Используя Retrofit 2.0.1, в моем интерфейсе API есть функция вызова, определенная в приложении для Android:
@Multipart
@POST("api.php")
Call<ResponseBody> doAPI(
@Part("lang") String lang,
@Part("file\"; filename=\"image.jpg") RequestBody file
);
Я отправляю запрос так:
Call call = service.doAPI («eng», imageFile);
где imageFile
это RequestBody
создан с File
объект. Часть загрузки изображения не имеет проблем, в то время как @Part("lang") String lang
часть получила дополнительные цитаты на сервере.
На стороне PHP это написано так:
$lang = trim($_POST['lang']);
который возвращается "eng"
, Почему в строке есть лишняя двойная кавычка?
конечно я могу лишить конечные и ведущие двойные кавычки, но это странно
Связанная проблема: https://github.com/square/retrofit/issues/1210
Для вашей проблемы, пожалуйста, используйте в качестве документации
Скаляры (примитивы, в штучной упаковке и строки):
com.squareup.retrofit2: конвертер-скаляры
Итак, добавьте compile 'com.squareup.retrofit2:converter-scalars:2.0.1'
в build.gradle
файл
Затем…
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_URL_BASE)
.addConverterFactory(ScalarsConverterFactory.create())
//.addConverterFactory(GsonConverterFactory.create())
.build();
Надеюсь, поможет!
использование RequestBody
для всех ваших параметров. Пожалуйста, пройдите по приведенному ниже коду!
File file = new File(imagePath);
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part imageFileBody = MultipartBody.Part.createFormData("media", file.getName(), requestBody);
RequestBody id = RequestBody.create(MediaType.parse("text/plain"),addOfferRequest.getCar_id());
ApiCallback.MyCall<BaseResponse> myCall = apiRequest.editOfferImage(imageFileBody,id);
использование RequestBody
класс Retrofit
вместо строки
@Multipart
@POST(ApiURL)
ApiCallback.MyCall<BaseResponse> editOfferImage(@Part MultipartBody.Part imageFile,@Part("id") RequestBody id);
Если вы не хотите использовать конвертер, вот что я сделал, чтобы отправить многокомпонентный запрос, содержащий файл изображения и 2 строки:
@Multipart
@POST("$ID_CHECK_URL/document")
fun postMultipart(@Part imageFile: MultipartBody.Part, @Part string2: MultipartBody.Part, @Part string2: MultipartBody.Part)
И называя это так:
val body = RequestBody.create(MediaType.parse("image/jpg"), file)
val imageFilePart = MultipartBody.Part.createFormData("file", file.name, reqFile)
val string1Part = MultipartBody.Part.createFormData("something", "string 1")
val string2Part = MultipartBody.Part.createFormData("somethingelse", "string 2")
service.postDocument(imageFilePart, string1Part, string2Part)