Аутентификатор, неверный перевод Java на Kotlin - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь преобразовать много кода Java в Kotlin.

Я нашел в стеке, как установить аутентификацию с помощью OkHttp:

 client.authenticator(new Authenticator() {
        @Override
        public Request authenticate(Route route, Response response) throws IOException {
            if (responseCount(response) >= 3) {
                return null; // If we've failed 3 times, give up. - in real life, never give up!!
            }
            String credential = Credentials.basic("name", "password");
            return response.request().newBuilder().header("Authorization", credential).build();
        }
    });

Это выглядит просто, но AndroidStudio переводит это неправильно, что-то вроде:

   client.authenticator(Authenticator { route, response ->
            if (responseCount(response) >= 3) {
                return@Authenticator null // If we've failed 3 times, give up. - in real life, never give up!!
            }
            val credential = Credentials.basic("name", "password")
            response.request().newBuilder().header("Authorization", credential).build()
        })

и яполучить ошибку "слишком много аргументов для публичного открытого веселья Authenticator ()"

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

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Нет, само по себе это правильный перевод, вы можете увидеть примеры в SAM Conversions документации.Судя по ошибке, у вас может быть что-то еще в области видимости, также называемое Authenticator, поэтому вы должны быть более явным и использовать анонимный объект , как в ответе Рэнди Холла.

0 голосов
/ 07 июня 2018

Ваш код Kotlin должен быть таким:

client.authenticator(object:Authenticator {
  @Throws(IOException::class)
  fun authenticate(route:Route, response:Response):Request {
    if (responseCount(response) >= 3)
    {
      return null // If we've failed 3 times, give up. - in real life, never give up!!
    }
    val credential = Credentials.basic("name", "password")
    return response.request().newBuilder().header("Authorization", 
credential).build()
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...