Существует ли ограничение на размер байта в теле ответа, использующем модификацию? - PullRequest
0 голосов
/ 12 февраля 2020

Я хотел бы знать, может ли размер байта тела ответа Json вызвать проблему с помощью модификации.

В настоящее время у меня возникает какая-то случайная проблема с обратным вызовом с использованием модификации с настройкой по умолчанию. OkHttp Client, В журналах перехвата Http все показывается нормально, но в коде он принимает вызов как сбой и выдает простое сообщение

java. net .SocketTimeoutException: сообщение о тайм-ауте: timeout

или

Розетка закрыта. java. net .SocketException

НЕТ больше, не меньше. Эти проблемы были для меня тупиковыми, поскольку они не показали мне возможного решения моей проблемы и, скорее всего, указывают мне неправильное направление.

Теперь единственное преимущество, которое у меня есть, - это размер байта что Джейсон (тело 276837 байт), когда большинство других моих тел ответов не go превышают 512 байт. Это заставляет меня поверить, что может быть стандартная сборка OkHttpCLient или Retrofit с ограничением, о котором я не знаю.

Проблема является случайной даже в среде разработки, но если я переключаю тип сети на HSDPA или что-то отличное от LTA или Full, это дает мне закрытый сокет или ошибку тайм-аута, в то время как на Full это случается только иногда.

Я собираюсь поставить свой код, чтобы увидеть, если какая-либо помощь.

Это моя реализация Gradle


implementation "com.squareup.retrofit2:retrofit:2.5.0"
implementation "com.squareup.retrofit2:converter-gson:2.3.0"
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.0'

Вот как я строю свой клиент и дооснащение


private fun buildRetrofit(): Retrofit {

    val logger = HttpLoggingInterceptor()
    logger.setLevel(HttpLoggingInterceptor.Level.BODY)

    val client = OkHttpClient()
        .newBuilder()
        .addInterceptor(logger)
        .build()

    return Retrofit.Builder()
        .baseUrl(FN.returnWebAPI(this))
        .client(client)
        .addConverterFactory(GsonConverterFactory.create())
        .build()

}

Вот как я делаю вызов, теперь просто получаю тело ответа, чтобы убедиться, что оно не связано с анализом данных. * 102 7 *


val idGrupoComercios = hashMapOf("idGrupo" to id)
                val hashComercio = HashComercio(hash, upperU.usuario.toUpperCase(Locale.getDefault()), "", jwt.toString(), idGrupoComercios
                )
            val callComercios: Call<ResponseBody> =
                service.getComercios(tokenBearer, hashComercio)

            callComercios.enqueue(object :
                Callback<ResponseBody> {
                override fun onFailure(
                    call: Call<ResponseBody>,
                    t: Throwable
                ) {
                    Crashlytics.logException(t)

                }

                override fun onResponse(
                    call: Call<ResponseBody>,
                    response: Response<ResponseBody>
                ) {
                    if (response.code() == 200) {
                       val data = response.body()!!

                }

            })

Также может помочь другая информация. Конфигурация моего эмулятора. По умолчанию LTE (ошибка - сокет закрыт или тайм-аут отображается случайным образом) enter image description here

- Опции, заданные эмулятором android (ошибка Full и LTE появляется случайно, любая другая всегда показывает исключение тайм-аута или закрытия сокета) enter image description here

- - Тот, который всегда дает проблемы enter image description here

------ Мой перехватчик HtttLogger

D/OkHttp: --> POST http://192.168.1.68:83/api/Comercios/comercios D/OkHttp: Content-Type: application/json; charset=UTF-8 D/OkHttp:

Длина содержимого: 418 D / OkHttp: Авторизация: Знаменосец eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfVXNlck5hbWUiOiJVU0VSX0JPTkFOWkExIiwiX0hhc2giOiJCRFo1R0EiLCJqdGkiOiI0NmI0MTA0NC03M2M2LTQ5MDEtOTcyMy0yZjE1NjE1ODgzZDgiLCJleHAiOjE1ODE0ODAzMjMsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODMiLCJhdWQiOiJNeVRlc3RBcGkifQ.EgVFlAzqOlV-RpjRRxXpQzp3q3kk1FqTcoaGDQBY0XA * ​​* * 1050 1051

1053 * Я надеюсь, что это какая-либо помощь, если вы могли бы дать мне совет будет принято, и если кто-то может сказать мне, как чтобы увидеть внутреннюю работу клиента и как я могу увидеть ошибку более точно, я был бы очень признателен. Я хочу больше информации, и эта проблема, кажется, не ясна, я считаю, что что-то можно сделать со стороны приложения.

1 Ответ

0 голосов
/ 13 февраля 2020

Не совсем. Если есть проблема с размером байта тела ответа, Retrofit сообщит вам об этом. Но для сетей 3g и некоторых из них у вас могут возникнуть проблемы с модернизацией, если ваш размер тела ответа превышает 1024 байта или содержит значения, которые могут увеличить время, необходимое для реконструкции для восстановления ответа.

...