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
マニフェストファイルのアプリケーションタグでAndroid:usesCleartextTraffic="true"
を使用してみてください! Android Volley!
Android Documentation
アプリがクリアテキストHTTPなどのクリアテキストネットワークトラフィックを使用するかどうかを示します。デフォルト値は「true」です。この属性が「false」に設定されている場合、プラットフォームコンポーネント(HTTPスタック、FTPスタック、DownloadManager、MediaPlayerなど)は、クリアテキストトラフィックを使用するアプリのリクエストを拒否します。サードパーティのライブラリもこの設定を尊重することを強くお勧めします。平文トラフィックを回避する主な理由は、機密性、信頼性、および改ざんに対する保護の欠如です。ネットワーク攻撃者は、送信されたデータを盗聴し、検出されずにデータを変更できます。 リンク
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.xml
にAndroid:networkSecurityConfig="@xml/network_security_config"
を追加します
複数の構成で複数のドメインを追加し、それらの一部がhttpsまたはその逆であることを確認できます。より安全な私見に見えます。