Fresco: Resposta de erro HTTP ao carregar resultados de imagem em conexão perdida

Criado em 6 dez. 2017  ·  4Comentários  ·  Fonte: facebook/fresco

Descrição

Notei um monte de linhas de registro como esta em todo o Logcat enquanto usava meu aplicativo:
19098-19147/<package> W/OkHttpClient: A connection to <my server> was leaked. Did you forget to close a response body?

Acabei reduzindo a um único SimpleDraweeView que estava causando isso quando tentei definir seu URI de imagem.

Usando imagepipeline-okhttp3, adicionei um cliente e interceptor OkHTTP para que pudesse inspecionar o que estava acontecendo com a solicitação / resposta HTTP. Acontece que a resposta não foi 200, e sim um erro 401. Isso evitou que a imagem carregasse conforme o esperado e também levou às linhas de registro acima.

Consegui corrigir esse erro 401 específico usando um interceptor para adicionar os cabeçalhos de autenticação necessários que estavam faltando. No entanto, gostaria de saber se houver diferentes erros de HTTP no futuro, há uma maneira geral de detectar erros de forma que não vaze uma conexão?

Reprodução

Defina um URI de imagem em um SimpleDraweeView que resulta em uma resposta de código de erro HTTP 401.

Informações adicionais

  • Versão Fresco: 1.5.0
  • imagepipeline-okhttp3 versão: 1.5.0
bug good first issue

Comentários muito úteis

Ah, aqui está um tweet do próprio Jake Wharton dizendo que o OkHttp na verdade faz parte do sistema a partir do Android v4.4: https://twitter.com/JakeWharton/status/482563299511250944

Acho que é assim que o HttpUrlConnection é implementado.

Todos 4 comentários

Obrigado pelo relatório! Não usamos o OkHttp internamente, portanto, essa é uma prioridade relativamente baixa para nós. Sinta-se à vontade para enviar uma solicitação de pull!

@foghina Você pode me explicar como Fresco estava usando OkHttp mesmo antes de eu incluir a dependência imagepipeline-okhttp3? Eu estava recebendo a linha de log acima ao usar as configurações padrão para Fresco (não usando a configuração de pipeline de imagem OkHttp). Eu até examinei meu arquivo build.gradle e certifiquei-me de excluir explicitamente OkHttp como uma dependência transitiva de todas as outras dependências. Em seguida, executei gradle app:dependencies e inspecionei a árvore de dependências para ter certeza de que OkHttp não fazia parte dela. De alguma forma, ainda recebo a linha de log reclamando de um vazamento de conexão OkHttp quando o Fresco carregou a imagem do problema. O OkHttp é usado internamente pelo sistema Android? Não vejo de que outra forma ele poderia estar nos logs se eu não o incluísse como uma dependência e nem o Fresco. Eu presumiria que se OkHttp não fosse incluído como uma dependência ou explicitamente definido na configuração do Fresco, internamente, o Fresco usaria apenas o cliente Apache HTTP ou HttpURLConnection, que é integrado ao próprio Android.

Ah, aqui está um tweet do próprio Jake Wharton dizendo que o OkHttp na verdade faz parte do sistema a partir do Android v4.4: https://twitter.com/JakeWharton/status/482563299511250944

Acho que é assim que o HttpUrlConnection é implementado.

Oh, querida. Eu não tinha ideia 😅

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ykostova picture ykostova  ·  3Comentários

eresid picture eresid  ·  4Comentários

hanhmh1203 picture hanhmh1203  ·  4Comentários

amodkanthe picture amodkanthe  ·  3Comentários

stevenmtang picture stevenmtang  ·  3Comentários