void не может быть преобразован в модуль при использовании kotlin в коде Java - Android - PullRequest
0 голосов
/ 15 сентября 2018

Я работаю с kotlin и java вместе в моем проекте, у меня есть класс kotlin, как показано ниже:

class AuthenticationPresenter @Inject constructor(
    private val navigator: AuthenticationNavigator,
    private val getCurrentServerInteractor: GetCurrentServerInteractor,
    private val getAccountInteractor: GetAccountInteractor,
    private val settingsRepository: SettingsRepository,
    private val localRepository: LocalRepository,
    private val tokenRepository: TokenRepository
) {
    suspend fun loadCredentials(newServer: Boolean, callback: (authenticated: Boolean) -> Unit) {
        val currentServer = getCurrentServerInteractor.get()
        val serverToken = currentServer?.let { tokenRepository.get(currentServer) }
        val settings = currentServer?.let { settingsRepository.get(currentServer) }
        val account = currentServer?.let { getAccountInteractor.get(currentServer) }

        account?.let {
            localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, account.userName)
        }

        if (newServer || currentServer == null || serverToken == null || settings == null || account?.userName == null) {
            callback(false)
        } else {
            callback(true)
            navigator.toChatList()
        }
    }
}

Я конвертирую нижеуказанный код (kotlin) в java:

presenter.loadCredentials(newServer || deepLinkInfo != null) { authenticated ->
    if (!authenticated) {
        showServerInput(deepLinkInfo)
    }
}

А это мой код конвертации в java, но выведите мне ошибку:

presenter.loadCredentials((newServer || deepLinkInfo != null), authenticated ->{
    if (!authenticated) {
        showServerInput(deepLinkInfo);
    }
});

Но скажите мне: Missing return statement

Что я могу использовать из этого loadCredentials в коде java?

код showServerInput:

fun showServerInput(deepLinkInfo: LoginDeepLinkInfo?) {
    addFragment(TAG_SERVER_FRAGMENT, R.id.fragment_container, allowStateLoss = true) {
        ServerFragment.newInstance(deepLinkInfo)
    }
}

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Попробуйте это

presenter.loadCredentials((newServer || deepLinkInfo != null),   authenticated ->{
    if (!authenticated) {
        showServerInput(deepLinkInfo);
    }
});
0 голосов
/ 15 сентября 2018

Функция передается в loadCredentials и возвращает Unit, поэтому измените код на

presenter.loadCredentials(newServer || deepLinkInfo != null) { authenticated ->
    if (!authenticated) {
        showServerInput(deepLinkInfo)
    } else {
        "AA"
    }
}

Unit ключевое слово в Kotlin означает функцию, которая ничего не возвращает. showServerInput(deepLinkInfo) функция возвращает Unit, а "AA" является оператором и ничего не возвращает.

0 голосов
/ 15 сентября 2018

Вам необходимо вернуть результат showServerInput:

presenter.loadCredentials((newServer || deepLinkInfo != null), authenticated ->{
    if (!authenticated) {
        return showServerInput(deepLinkInfo); // Here!
    } else {
        return "AA";
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...