繁体   English   中英

滑翔不加载一些图像 URL

[英]Glide not loading some Image URL

我正在尝试使用 Glide 加载图像 URL。 错误。

class com.bumptech.glide.load.engine.GlideException:加载资源失败

我在谷歌搜索了这个错误,它说 https 问题,但之前我在其他项目中工作过 https。它工作正常。为什么 https 是其他问题?

此链接工作正常

但这些都不起作用

图片链接

图像加载:

   Glide.with(context)
            .load(bannerImageModel.getOutput().get(position).getBanner_img())
            .apply(new RequestOptions().
            diskCacheStrategy(DiskCacheStrategy.ALL))
            .into(view);

链接1:https://freshtocook.in/uploads/banner/47a16ffc2fc5935dccd37574083c6201.jpg

链接2:https://freshtocook.in/uploads/banner/7eecf823e008a0bb93f347d994b6e534.jpg

链接3:https://freshtocook.in/uploads/banner/62d69dfa30acabbfe60bc77c5f19cc53.jpg

完整错误:

javax.net.ssl.SSLHandshakeException(java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load .engine.GlideException: Fetching data failed, class java.io.InputStream, REMOTE There was 1 cause: javax.net.ssl.SSLHandshakeException(java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.) call GlideException# logRootCauses(String) for more detail Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed There was 1 cause: javax.net.ssl.SSLHandshakeException(java.security.cert.CertPathValidatorE xception: Trust anchor for certification path not found.) call GlideException#logRootCauses(String) for more detail Cause (1 of 1): class javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path未找到。 2020-07-14 18:25:03.367 24169-24169/com.example.freshtocook I/Glide: Root cause (1 of 1) javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification找不到路径。 at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:239) at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:1471) at com.android.okhttp.internal.io .RealConnection.connectSocket(RealConnection.java:1415) at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:1359) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.Z93F725 A07423FE1C889F448B33D21F46Z:221) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:144) at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:106) at com.android .okhttp.internal.http.HttpEngine.connect(HttpEngine.java:400) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:333) at com.android.okhttp.internal.huc.HttpURLConnectionImpl .execute(HttpURLConnectionImpl.Z9 3F725A07423FE1C889F448B33D21F46Z:483) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:135) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:90) at com.android .okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:30) at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:104) at com.bumptech.glide.load.data.HttpUrlFetcher .loadData(HttpUrlFetcher.java:59) 在 com.bumptech.glide.load.model.Mult iModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:164) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher. onLoadFailed(MultiModelLoader.java:154) at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:65) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java: 100) 在 com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) 在 Z4D236D9A2D102C5FE6AD1C50DA4BECt5Z。 ech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:309) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at com.bumptech.glide.load.engine. DecodeJob.run(DecodeJob.java:235) 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:919) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446) Caused by: java.security.cert.CertificateException: Z 93F725A07423FE1C889F448B33D21F46Z.security.cert.CertPathValidatorException:找不到证书路径的信任锚。 at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:668) at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:513) at com.android.org.conscrypt.TrustManagerImpl.checkTrusted (TrustManagerImpl.java:432) at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:360) at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94) at android.security. net.config.RootTrustManager.checkServerTrusted(RootTrustManager. java:89) at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:224) at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:430) at com.android.org.conscrypt .NativeCrypto.SSL_do_handshake(Native Method) at com.android.org.conscrypt.NativeSsl.doHandshake(NativeSsl.java:387) at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:234) at com.android .okhttp.internal.ZF98E D07A4D5F50F7DE1410D905F1477FZ.RealConnection.connectTls(RealConnection.java:1471) at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:1415) at com.android.okhttp.internal.io.RealConnection.connect(RealConnection. java:1359) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:221) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:144) at com. android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:106) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:400) at com.android.okhttp.internal.http. HttpEngine.sendRequest(HttpEngine.java:333) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:483) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java: 135) 在 com.ZC31B32364CE19CA8FCD150A4 17ECCE58Z.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:90) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:30) at com.bumptech.glide.load.data. HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:104) at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:59) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader. java:100) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.Z93F725A07423FE1C889F448B33D21F46 Z:164) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154) at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:65) at com .bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) at com.bumptech.glide.load .engine.DecodeJob.runGenerators(DecodeJob.java:309) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at com.bump tech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) 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:919) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446) Caused by: java. security.cert.CertPathValidatorException:找不到证书路径的信任锚。 at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:668) at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:513) at com.android.org.conscrypt.TrustManagerImpl.checkTrusted (TrustManagerImpl.java:432) at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:360) at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94) at android.security. net.config.RootTrustManager.checkServerTrusted(RootTrustMan ager.java:89) at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:224) at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:430) at com.android.org .conscrypt.NativeCrypto.SSL_do_handshake(Native Method) at com.android.org.conscrypt.NativeSsl.doHandshake(NativeSsl.java:387) at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:234) at com .android.okhttp.int ernal.io.RealConnection.connectTls(RealConnection.java:1471) at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:1415) at com.android.okhttp.internal.io.RealConnection.connect( RealConnection.java:1359) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:221) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:144) at Z4D236D9A2D102C5FE6AD1C5 0DA4BEC50Z.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:106) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:400) at com.android.okhttp.internal. http.HttpEngine.sendRequest(HttpEngine.java:333) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:483) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl. java:135) 在 com.ZC31B32364CE19 CA8FCD150A417ECCE58Z.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:90) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:30) at com.bumptech.glide.load.data. HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:104) at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:59) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader. java:100) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.Z93F725A07423FE1C889F4 48B33D21F46Z:164) at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154) at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:65) at com .bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100) at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) at com.bumptech.glide.load .engine.DecodeJob.runGenerators(DecodeJob.java:309) at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279) at Z4D236D9A2D102C5FE6AD1C50DA4 BEC50Z.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235) 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:919) at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446) 2020-07 -14 18:25:03.457 24169-24705/com.example.freshtocook I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 2020-07-14 18:25:03.458 24169-24705/com.example.freshtocook I /System.out: (HTTPLog)-静态: isSBSettingEnabled false

现在使用 ION lib 出现此错误:

/ViewRootImpl: sendUserActionEvent() mView 返回。 2020-07-14 18:46:15.892 7931-8566/com.example.freshtocook E/CONSCRYPT: ------------------不受信任的链: ------ ---------------- 2020-07-14 18:46:15.892 7931-8566/com.example.freshtocook E/CONSCRYPT: == Chain0 == 版本: 3 2020-07 -14 18:46:15.893 7931-8566/com.example.freshtocook E/CONSCRYPT: AuthorityKeyIdentifier: 418301680148d8c5ec454ad8ae177e99bf99b05e1b8018d61e1 2020-07-14 18:46:15.893 7931-8566/com.example.freshtocook E/CONSCRYPT: SubjectKeyIdentifier: 416041493ef6a0cb4e08cbdefeb4fca54cd8872b99d23a0 2020 -07-14 18:46:15.893 7931-8566/com.example.freshtocook E/CONSCRYPT: 序列号: 74e9c119b31c8edeb61e2c05de385e5a 2020-07-14 18:46:15.894 7931-8566/com.example.DNashtocook E/CONSCRYPT : CN=freshtocook.in 2020-07-14 18:46:15.895 7931-8566/com.example.freshtocook E/CONSCRYPT: IssuerDN: CN=Sectigo RSA Domain Validation Secure Server CA, O=Sectigo Limited, L=Salford, ST=大曼彻斯特,C=GB 2020-07-14 18:46:15.916 7931-8566/com.example.freshtocook E/CONSCRYPT:不要之前:5 月 3 日星期日 05:30:00 GMT+05:30 2020 2020-07-14 18:46:15.916 7931-8566/com.example.freshtocook E/CONSCRYPT:不要在之后:5 月 4 日星期二 05:29: 59 GMT+05:30 2021 2020-07-14 18:46:15.916 7931-8566/com.example.freshtocook E/CONSCRYPT:Sig ALG 名称:SHA256withRSA 2020-07-14 18:46:15.917 7931-8566/com .example.freshtocook E/CONSCRYPT: Signature: -6902f85f8676a61300badd35bbd41f6df636081e17059b9598ab32694434ec9a6366f7618241e05491a2b5a4a53ca3e48f2e4c51b381ace0056ec403e9062abd287972488ac6262709c60af3bb02b4aa3a2e966c84ed9590b1fc6f50e957681648e0fb250111741e5dad73651cb4d9efbe97acbf2a371b0ceceec9e402bdbedf2f5dfec54844a46c4946a9404ed6a9028ddf1aaed1d34dda3a09dc551916d228b4b98abaf4d3942637651b452ba7b5909b6140f3a69ad4752dbf2d64675898e40fbbe707d3ae7cb1aeb0b210fbe46b3fc949bef45179fe3bb3b9631e586cbc3f17d9c18e8b61a02cb7d5e0413f185b7f345c5612ea8b55f61d2f2340ee63e8be

您需要从源域下载证书。 只需打开 SSL 证书并将图像拖放到 android 项目的原始目录中。 重命名并删除扩展名和 '. ' 句号。

我的依赖项看起来像这样

dependencies {
    implementation fileTree( dir: 'libs', include: ['*.jar'] )

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'androidx.test.ext:junit:1.1.1'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    // https://mvnrepository.com/artifact/com.koushikdutta.ion/ion
    implementation group: 'com.koushikdutta.ion', name: 'ion', version: '2.2.0'



}

我正在使用 Ion 2.2.0 并且适用于您不工作的图像。

import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;


public class MainActivity extends AppCompatActivity {

private ImageView img;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    img = findViewById(R.id.ntImg);


    try {


        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        // cert file stored in \app\src\main\res\raw
        InputStream caInput = getResources().openRawResource(R.raw.freshtocook);

        Certificate ca = cf.generateCertificate(caInput);
        caInput.close();

        KeyStore keyStore = KeyStore.getInstance("BKS");
        keyStore.load(null, null);
        keyStore.setCertificateEntry("ca", ca);

        String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);

        TrustManager[] wrappedTrustManagers = getWrappedTrustManagers(tmf.getTrustManagers());

        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, wrappedTrustManagers, null);

        AsyncSSLSocketMiddleware sslMiddleWare = Ion.getDefault(MainActivity.this).getHttpClient().getSSLSocketMiddleware();
        sslMiddleWare.setTrustManagers(wrappedTrustManagers);
        sslMiddleWare.setHostnameVerifier(getHostnameVerifier());
        sslMiddleWare.setSSLContext(sslContext);

        Ion.with(MainActivity.this)
                .load("https://freshtocook.in/uploads/banner/47a16ffc2fc5935dccd37574083c6201.jpg")
                .asBitmap()
                .setCallback(new FutureCallback<Bitmap>() {
                    @Override
                    public void onCompleted(Exception e, Bitmap bitmap) {
                        img.setImageBitmap(bitmap);
                    }
                });

    } catch (Exception e) {

    }


}


private HostnameVerifier getHostnameVerifier() {
    return new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
            // or the following:
            // HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
            // return hv.verify("www.yourserver.com", session);
        }
    };
}

private TrustManager[] getWrappedTrustManagers(TrustManager[] trustManagers) {
    final X509TrustManager originalTrustManager = (X509TrustManager) trustManagers[0];
    return new TrustManager[]{
            new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return originalTrustManager.getAcceptedIssuers();
                }

                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                    try {
                        if (certs != null && certs.length > 0) {
                            certs[0].checkValidity();
                        } else {
                            originalTrustManager.checkClientTrusted(certs, authType);
                        }
                    } catch (CertificateException e) {
                        Log.w("checkClientTrusted", e.toString());
                    }
                }

                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                    try {
                        if (certs != null && certs.length > 0) {
                            certs[0].checkValidity();
                        } else {
                            originalTrustManager.checkServerTrusted(certs, authType);
                        }
                    } catch (CertificateException e) {
                        Log.w("checkServerTrusted", e.toString());
                    }
                }
            }
    };
}
}

为了进一步的支持,我的清单看起来像这样

    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:usesCleartextTraffic="true"
    android:theme="@style/AppTheme" 
    tools:ignore="GoogleAppIndexingWarning">
    <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

在此处输入图像描述 从这里拖放证书。 单击锁定图标 > 查看证书 > 将其拖放到您的原始文件夹中。 并记得重命名,不要留下除名称以外的任何部分

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM