rxjava使用Single在doOnSuccess中传递参数

rxjava使用Single在doOnSuccess中传递参数,java,kotlin,rx-java,Java,Kotlin,Rx Java,我正在尝试使用单个参数在doOnSuccess中传递一个参数 然而,我得到了一个错误,我似乎无法解决 Java 8 io.reactivex:rxjava:1.3.6 kotlin 1.2.21 错误在.doOnSuccess中。因为我想将消息传递给HandletTranslationResponse class TranslateInteractor(val repository: Respository) { fun requestNetworkTranslated(message

我正在尝试使用单个参数在doOnSuccess中传递一个参数

然而,我得到了一个错误,我似乎无法解决

Java 8
io.reactivex:rxjava:1.3.6
kotlin 1.2.21
错误在.doOnSuccess中。因为我想将消息传递给HandletTranslationResponse

class TranslateInteractor(val repository: Respository) {
    fun requestNetworkTranslated(message: String): Completable {
        return repository.fetchTranslation(message)
                .doOnSuccess { handleTranslationResponse(message, it) }.toCompletable()
    }

    private fun handleTranslationResponse(message, String, translatedResponse: TranslatedResponse) {
        saveTranslation(
                "",
                translatedResponse.content,
                translatedResponse.translationEngine)
    }

    private fun saveTranslation(message: String, content: String, engine: String) {
        /* Save to local storage */
    }
}
我如何将信息和从TranslatedResponse获得的信息传递回HandletTranslationResponse

存储库是一个java类,它返回一个:

Type mismatch: inferred type is String but TranslatedResponse was expected
请求

data class TranslatedResponse(
        val content: String,
        val translationEngine: String)
对于networkAPI,我在java代码段中提供了以下内容:

data class TranslateRequest(val message: String)
公共接口网络API{
单取翻译(TranslateRequest请求);
}

非常感谢您的建议,

您之所以不能这样做,是因为
doonAccess
只接受一个参数,即
存储库返回的任何参数

您需要以某种方式将原始消息添加到
存储库返回的响应中。有两个选项(例如,使用
或新的
数据类

例如:

public interface NetworkAPI {
    Single<TranslatedResponse> fetchTranslation(TranslateRequest request);
}
现在,您的
存储库成为:

data class Translation(
    val originalMessage: String,
    val translatedMessage: TranslationResponse
)

之所以不能这样做,是因为
doonAccess
只接受一个参数,即
存储库返回的任何参数

您需要以某种方式将原始消息添加到
存储库返回的响应中。有两个选项(例如,使用
或新的
数据类

例如:

public interface NetworkAPI {
    Single<TranslatedResponse> fetchTranslation(TranslateRequest request);
}
现在,您的
存储库成为:

data class Translation(
    val originalMessage: String,
    val translatedMessage: TranslationResponse
)

也许
{handleTranslationResponse(it)}
?我已经更改了参数,因为我需要将消息传递给handleTranslationResponse。因此,我已更改为
{handleTranslationResponse(message,it)}
传递消息和'it'是否正确可能
{handleTranslationResponse(it)}
?我已更改参数,因为我需要将消息传递给handleTranslationResponse。所以我改为
{handleTranslationResponse(message,it)}
传递消息和“it”是否正确
class TranslateInteractor(val repository: Respository) {
    fun requestNetworkTranslated(message: String): Completable {
        return repository.fetchTranslation(message)
                .doOnSuccess { handleTranslationResponse(it) }.toCompletable()
    }

    private fun handleTranslationResponse(translation: Translation) {
        saveTranslation(
            translation.originalMessage,
            translation.translatedMessage.content,
            translation.translatedMessage.translationEngine)
    }

    private fun saveTranslation(message: String, content: String, engine: String) {
        // do whatever you want!
    }
}