Как отправить цепочку POST-запроса RxJava - PullRequest
0 голосов
/ 10 февраля 2020

Мне нужно отправить первый запрос POST на сервер, вставить полученный ответ во второй запрос POST и отправить его обратно на сервер. Как я могу реализовать это с RxJava? На данный момент все работает, но второй вопрос не успевает получить ответ по первому запросу и поле imageMediaId отправляется пустым.

Моя функция:

fun uploadNewImageAndContact(toPath: String?, newContactApi: ContactsApi) {
        val file = File(toPath)
        val fileReqBody: RequestBody = file.asRequestBody("image/*".toMediaTypeOrNull())
        val part: MultipartBody.Part =
            MultipartBody.Part.createFormData("upload", file.name, fileReqBody)

        // First Request
        imagesService.postImage(part).enqueue(object : Callback<ResponseBody> {
            override fun onFailure(call: Call<ResponseBody>, t: Throwable) {

            }

            override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
                if (response.code() == 201) {
                    // Get Image response Id
                    val gson = Gson()
                    val imageResponse =
                        gson.fromJson(response.body()?.string(), ImageResponse::class.java)
                    imageMediaId = imageResponse.ids[0]

                    // Second Request
                    contactsService.postNewContact(newContactApi)
                        .enqueue(object : Callback<ContactsApi> {
                            override fun onFailure(call: Call<ContactsApi>, t: Throwable) {

                            }

                            override fun onResponse(call: Call<ContactsApi>, response: Response<ContactsApi>) {

                            }

                        })
                }
            }

        })

    }

Моя функция ViewModel:

val newContactsApi = ContactsApi(id = "", firstName = mFirstName, lastName = mLastName, phone = mPhone,
                email = mEmail, notes = mNotes, images = "https://mydb.site.io/media/${apiRepository.imageMediaId}")


            apiRepository.uploadNewImageAndContact(toPath, newContactsApi)
...