Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何发送链式POST请求RxJava_Android_Kotlin_Retrofit2_Rx Java2 - Fatal编程技术网

Android 如何发送链式POST请求RxJava

Android 如何发送链式POST请求RxJava,android,kotlin,retrofit2,rx-java2,Android,Kotlin,Retrofit2,Rx Java2,我需要将第一个POST请求发送到服务器,将收到的响应插入第二个POST请求并将其发送回服务器。如何使用RxJava实现这一点?目前,一切正常,但第二个问题没有时间从第一个请求中获得答案,imageMediaId字段被发送为空 我的职能: fun uploadNewImageAndContact(toPath: String?, newContactApi: ContactsApi) { val file = File(toPath) val fileReqBody

我需要将第一个
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>) {

                            }

                        })
                }
            }

        })

    }
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)

使用rxjavaflatmap方法。下面是一个如何使用它来链接2个响应的示例:我需要一个关于Kotlin的解决方案,但我找不到任何建议您研究改型和RX改型,这将使您更轻松。但是,正如猜测者所说,flatMap是您想要用来将2个可观察的REST请求链接在一起的操作符。