#android #kotlin #retrofit2
Вопрос:
Я пытаюсь опубликовать данные двойной, строковой и составной формы с изображением, используя Retrofit 2, но безрезультатно. Я постоянно получаю код состояния 400 ошибок. Поискал в Google, но не смог найти ответ, который работает в моем случае. Прилагается скриншот пользовательского интерфейса Swagger, который отлично работает в браузере.
Это то, что я до сих пор пробовал в Котлине:
interface IReportAPI {
@Multipart
@POST("/api/Reports")
suspend fun postReport(
@Header("Authorization") token: String,
@Part("AssignmentId") assignmentId: RequestBody?,
@Part("MachineId") machineId: RequestBody?,
@Part("Distance") distance: Double?,
@Part("OriginalDistance") originalDistance: Double?,
@Part("WorkedHours") workedHours: Double?,
@Part("OriginalWorkedHours") originalWorkedHours: Double?,
@Part("RouteImageFormFile") routeImageFormFile: RequestBody?
): JsonObject
}
Это часть обслуживания:
val assignmentID: RequestBody = RequestBody.create(
MediaType.parse("text/plain"),
"79087c01-573a-a727-028d-d667bd54e236"
)
val machineID: RequestBody = RequestBody.create(
MediaType.parse("text/plain"),
"39077c01-59a3-bc5a-8563-e9d63f1027d1")
val fileUri = Uri.parse("android.resource://fi.gambitlabs.puhasworker/drawable/drawer_picture.png")
val imgFile = File(fileUri.path)
val requestBodyFile: RequestBody =
RequestBody.create(MediaType.parse("image/*"), imgFile)
// val assignmentID = "79087c01-573a-a727-028d-d667bd54e236" // tried with no success
// val machineID = "39077c01-59a3-bc5a-8563-e9d63f1027d1"
val distance = 10.0
val originalDistance = 11.0
val workedHours = 12.0
val originalWorkedHours = 13.0
message = reportService.postReport(authService.getAuth(token), assignmentID, machineID, distance, originalDistance, workedHours, originalWorkedHours, requestBodyFile)
Все, что я получаю, — это код статуса 400. Я в замешательстве по поводу того, как мне следует добавлять двойное значение в данные из нескольких частей/форм.
Комментарии:
1. Что значит 400?
2. Также используйте if (imgFile.exists ()), прежде чем продолжать предполагать, что файл существует.