2017-01-09 1 views
1

Я использую Picasso 2.5.2 в своем приложении. Он работает хорошо, но не может загружать изображения с одного из сторонних серверов. Когда я пытаюсь загрузить фотографии с этого сайта, я получаю эту ошибку:Picasso: UnknownServiceException: связь CLEARTEXT не включена для клиента

java.net.UnknownServiceException: CLEARTEXT communication not enabled for client 
at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:98) 
at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:196) 
at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:132) 
at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:101) 
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) 
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) 
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) 
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) 
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:179) 
at okhttp3.RealCall.execute(RealCall.java:63) 
at com.jakewharton.picasso.OkHttp3Downloader.load(OkHttp3Downloader.java:136) 
at com.squareup.picasso.NetworkRequestHandler.load(NetworkRequestHandler.java:47) 
at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:206) 
at com.squareup.picasso.BitmapHunter.run(BitmapHunter.java:159) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 
at com.squareup.picasso.Utils$PicassoThread.run(Utils.java:411) 

Когда я открываю это изображение в браузере, он успешно загружается. URL-адрес выглядит как http://somesite.com/path/to/file/123456.jpg. Это ошибка Пикассо? Как это исправить?

ответ

3

Is it Picasso bug?

Я не думаю, что так. По умолчанию OkHttp блокирует связь без SSL по умолчанию. Я не делал HTTP-запрос с открытым текстом с OkHttp в возрасте, но это то, что я вижу из моего рассмотрения кода, относящегося к этому сообщению об ошибке.

How to fix it?

Используйте URL-адрес https.

Если какой-то дьявольский безумец угрожает взорвать небольшой город, если вы используете обычный http, настроить OkHttpClient через его Builder, в том числе призыв к connectionSpecs(), чтобы указать, какие виды HTTP соединений вы готовы поддержать. Например:

.connectionSpecs(Arrays.asList(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))

позволит "современный TLS" (точно не уверен, что квалифицируется) и обычный HTTP.

Затем используйте это приложение OkHttpClient для Picasso, а также за все, что вы делаете непосредственно, используя OkHttp.

1

Я искал ваши проблемы. И я думаю, что у вас проблема с okhttp3, как проблема, на https://github.com/fabric8io/kubernetes-client/issues/498 - проблема с подключением аутентификации. Вы можете попытаться обойти обычаем ваш загрузчик Пикассо по:

// create Picasso.Builder object 
Picasso.Builder picassoBuilder = new Picasso.Builder(context); 

// let's change the standard behavior before we create the Picasso instance 
// for example, let's switch out the standard downloader for the OkHttpClient 
picassoBuilder.downloader(new OkHttpDownloader(new OkHttpClient())); 
// or you can try 

(picassoBuilder.downloader( 
    new OkHttpDownloader(
     UnsafeOkHttpClient.getUnsafeOkHttpClient() 
    ) 
);) 

// Picasso.Builder creates the Picasso object to do the actual requests 
Picasso picasso = picassoBuilder.build(); 

Теперь вы можете использовать свой Picasso, чтобы загрузить изображение.

picasso 
    .load(linktoimage) 
    .into(imageView3); 
+1

Помните, что реализация 'UnsafeOkHttpClient', которая плавает вокруг интернетов, является катастрофой безопасности и вы будете запрещены в Play Маркете. Не используйте код, который слепо принимает все SSL-сертификаты. – CommonsWare

+1

Я только обнаружил вашу проблему. Думаю проблема с подключением okhttp. Если вы обнаружите проблему, поделитесь своим решением (вы можете попробовать с решением для @CommonsWare). Благодарю. –

Смежные вопросы