Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

252
Vistas
OkHttpClient a veces obtiene una respuesta json incompleta

Me he enfrentado a este error json incompleto y no he podido encontrar el problema. La respuesta de la API funciona bien en POSTMAN. Pero este problema sucedió en mi emulador de Android y solo sucedió al azar. Este proyecto está construido con kotlin dagger-hilt retrofit2 okhttp3 gson.

Respuesta de éxito

 I/okhttp.OkHttpClient: <-- 200 OK http://10.0.2.2:8000/api/v1/user/friend/mutual?name=as (217ms) I/okhttp.OkHttpClient: Host: 10.0.2.2:8000 I/okhttp.OkHttpClient: Date: Thu, 03 Mar 2022 06:38:59 GMT I/okhttp.OkHttpClient: Connection: close I/okhttp.OkHttpClient: X-Powered-By: PHP/7.4.13 I/okhttp.OkHttpClient: Cache-Control: no-cache, private I/okhttp.OkHttpClient: Date: Thu, 03 Mar 2022 06:38:59 GMT I/okhttp.OkHttpClient: Content-Type: application/json I/okhttp.OkHttpClient: X-RateLimit-Limit: 60 I/okhttp.OkHttpClient: X-RateLimit-Remaining: 52 I/okhttp.OkHttpClient: Access-Control-Allow-Origin: * I/okhttp.OkHttpClient: {"friends":[{"user_id":16,"name":"Grant Erdman","username":"lilla.kulas","email":"claudie04@example.org","image":"https:\/\/via.placeholder.com\/640x480.png\/00dd44?text=dolor","relationship":"friend"}],"requests":[]} I/okhttp.OkHttpClient: <-- END HTTP (217-byte body)

Falta la respuesta Json incompleta "}"

 I/okhttp.OkHttpClient: <-- 200 OK http://10.0.2.2:8000/api/v1/user/friend/mutual?name=as (198ms) I/okhttp.OkHttpClient: Host: 10.0.2.2:8000 I/okhttp.OkHttpClient: Date: Thu, 03 Mar 2022 06:39:00 GMT I/okhttp.OkHttpClient: Connection: close I/okhttp.OkHttpClient: X-Powered-By: PHP/7.4.13 I/okhttp.OkHttpClient: Cache-Control: no-cache, private I/okhttp.OkHttpClient: Date: Thu, 03 Mar 2022 06:39:00 GMT I/okhttp.OkHttpClient: Content-Type: application/json I/okhttp.OkHttpClient: X-RateLimit-Limit: 60 I/okhttp.OkHttpClient: X-RateLimit-Remaining: 51 I/okhttp.OkHttpClient: Access-Control-Allow-Origin: * I/okhttp.OkHttpClient: {"friends":[{"user_id":16,"name":"Grant Erdman","username":"lilla.kulas","email":"claudie04@example.org","image":"https:\/\/via.placeholder.com\/640x480.png\/00dd44?text=dolor","relationship":"friend"}],"requests":[] I/okhttp.OkHttpClient: <-- END HTTP (216-byte body) E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.findplan, PID: 4695 java.io.EOFException: End of input at line 1 column 217 path $.requests at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1395) at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:481) at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:413) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:216) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27) at com.example.findplan.utils.NullOnEmptyConverterFactory$1.convert(NullOnEmptyConverterFactory.java:20) at com.example.findplan.utils.NullOnEmptyConverterFactory$1.convert(NullOnEmptyConverterFactory.java:16) at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243) at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153) at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) I/Process: Sending signal. PID: 4695 SIG: 9

Mi módulo de red

 @Singleton @Provides fun provideOkHttpClient(mySharedPreferences: MySharedPreferences): OkHttpClient { val builder = OkHttpClient .Builder() .connectTimeout(1, TimeUnit.MINUTES) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(15, TimeUnit.SECONDS) val authenticationInterceptor = AuthenticationInterceptor(mySharedPreferences) builder.addInterceptor(authenticationInterceptor) val interceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY); builder.addNetworkInterceptor(interceptor) return builder.build() } @Singleton @Provides fun provideGson(): Gson { return GsonBuilder() .setLenient() .create() } @Singleton @Provides fun provideRetrofit(gson: Gson, okHttpClient: OkHttpClient): Retrofit { return Retrofit.Builder() .baseUrl(BuildConfig.BASE_URL) .client(okHttpClient) .addConverterFactory(NullOnEmptyConverterFactory()) .addConverterFactory(GsonConverterFactory.create(gson)) .build() }

NullOnEmptyConverterFactory

 public class NullOnEmptyConverterFactory extends Converter.Factory { @Override public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) { final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations); return new Converter<ResponseBody, Object>() { @Override public Object convert(ResponseBody body) throws IOException { if (body.contentLength() == 0) return null; return delegate.convert(body); } }; } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Sospecho que el emulador de Android podría estar interfiriendo contigo aquí. He visto problemas con su mal comportamiento, particularmente en Windows.

https://issuetracker.google.com/issues/119027639

Si desea una solución alternativa, considere cambiar su servidor para usar algo que no sea Connection: close para terminar su cuerpo de respuesta. Quizás codificación fragmentada o un encabezado de longitud de contenido.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda