Опубликуйте двойные, строковые и изображения в виде данных в виде нескольких частей с помощью модификации 2 в Kotlin

#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 ()), прежде чем продолжать предполагать, что файл существует.