web-dev-qa-db-ja.com

Android 9.0 Pieでのピカソ画像読み込みの問題

Android 9.0 PieでPicassoライブラリを使用して画像をロードすることはできません。実際、以下のバージョンでは正常に動作します。エラーメッセージは表示されません。

Picasso.get().setLoggingEnabled(true);

彼はメッセージログを持っています:

2018-10-19 13:13:20.467 24840-24862/com.xyz.test.testpicasso D/ViewContentFactory: initViewContentFetcherClass
2018-10-19 13:13:20.467 24840-24862/com.xyz.test.testpicasso I/ContentCatcher: ViewContentFetcher : ViewContentFetcher
2018-10-19 13:13:20.467 24840-24862/com.xyz.test.testpicasso D/ViewContentFactory: createInterceptor took 0ms
2018-10-19 13:13:20.468 24840-24862/com.xyz.test.testpicasso I/ContentCatcher: Interceptor : Catcher list invalid for [email protected]@147874166
2018-10-19 13:13:20.468 24840-24862/com.xyz.test.testpicasso I/ContentCatcher: Interceptor : Get featureInfo from config pick_mode
2018-10-19 13:13:20.485 24840-24840/com.xyz.test.testpicasso D/Picasso: Main        created      [R1] Request{https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png}
2018-10-19 13:13:20.492 24840-24864/com.xyz.test.testpicasso D/Picasso: Dispatcher  enqueued     [R1]+6ms 
2018-10-19 13:13:20.492 24840-24866/com.xyz.test.testpicasso D/Picasso: Hunter      executing    [R1]+7ms 
2018-10-19 13:13:20.555 1531-1684/? I/ActivityManager: Displayed com.xyz.test.testpicasso/.MainActivity: +114ms
2018-10-19 13:13:20.555 5475-5603/? D/PowerKeeper.Event: notifyActivityLaunchTime: com.xyz.test.testpicasso/.MainActivity totalTime: 114
2018-10-19 13:13:20.709 735-816/? W/SurfaceFlinger: Attempting to set client state on removed layer: Splash Screen com.xyz.test.testpicasso#0
2018-10-19 13:13:20.710 735-816/? W/SurfaceFlinger: Attempting to destroy on removed layer: Splash Screen com.xyz.test.testpicasso#0
2018-10-19 13:13:20.775 1531-1684/? I/Timeline: Timeline: Activity_windows_visible id: ActivityRecord{821c51 u0 com.xyz.test.testpicasso/.MainActivity t4372} time:9356677
2018-10-19 13:13:21.003 24840-24864/com.xyz.test.testpicasso D/Picasso: Dispatcher  retrying     [R1]+518ms 
2018-10-19 13:13:21.004 24840-24872/com.xyz.test.testpicasso D/Picasso: Hunter      executing    [R1]+519ms 
2018-10-19 13:13:21.513 24840-24864/com.xyz.test.testpicasso D/Picasso: Dispatcher  retrying     [R1]+1027ms 
2018-10-19 13:13:21.514 24840-24877/com.xyz.test.testpicasso D/Picasso: Hunter      executing    [R1]+1028ms 
2018-10-19 13:13:21.516 24840-24864/com.xyz.test.testpicasso D/Picasso: Dispatcher  batched      [R1]+1030ms for error
2018-10-19 13:13:21.717 24840-24864/com.xyz.test.testpicasso D/Picasso: Dispatcher  delivered    [R1]+1232ms
12
tejraj

マニフェストファイルのアプリケーションタグでAndroid:usesCleartextTraffic="true"を使用してみてください! Android Volley!

Android Documentation

アプリがクリアテキストHTTPなどのクリアテキストネットワークトラフィックを使用するかどうかを示します。デフォルト値は「true」です。この属性が「false」に設定されている場合、プラットフォームコンポーネント(HTTPスタック、FTPスタック、DownloadManager、MediaPlayerなど)は、クリアテキストトラフィックを使用するアプリのリクエストを拒否します。サードパーティのライブラリもこの設定を尊重することを強くお勧めします。平文トラフィックを回避する主な理由は、機密性、信頼性、および改ざんに対する保護の欠如です。ネットワーク攻撃者は、送信されたデータを盗聴し、検出されずにデータを変更できます。 リンク

37
Intsab Haider

Android:usesCleartextTraffic="true"での答えは機能しますが、これによりすべての接続がhttpではなくsになります。 2018年に欲しいです。

httpで到達しているドメインがわかっていて、それを信頼している場合ネットワークセキュリティ設定

res/xml/network_security_config.xmlでxmlファイルを定義します

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>

cleartextTrafficPermitted="true"とそのサブについてのみsecure.example.comを参照してください。

そして、AndroidManifest.xmlAndroid:networkSecurityConfig="@xml/network_security_config"を追加します

複数の構成で複数のドメインを追加し、それらの一部がhttpsまたはその逆であることを確認できます。より安全な私見に見えます。

15
Quentin Klein