2014-08-28 110 views
-1

我一直在試圖在Url這幾天加載圖像,但沒有任何我已經嘗試過的成功。我正在使用Volley庫,我嘗試的第一件事是一個簡單的...爲什麼無法從Android的此Url加載圖像

 mImageView.setImageUrl("https://cub.com/content/dam/B2C/enterprisebannerwebsites/Cub/CUB_WK25_HP_BackToSchool.jpg", VolleyImgController.getInstance().getImageLoader()); 

但是,在networkimageview中返回一個空白。 隨着在logcat的以下信息

08-27 22:33:49.209 3069-3069/com.supervalu.mobile.android D/Volley﹕ [1] Request.finish: 15308 ms: [ ] https://cub.com/content/dam/B2C/enterprisebannerwebsites/Cub/CUB_WK25_HP_BackToSchool.jpg 0x422b54c3 LOW 1 

我又試圖創建自己的HttpStack的情況下,它是使用下面的代碼加載HTTPS圖像問題...

public static DefaultHttpClient getHttpsClient(){ 
    // register scheme for http 
    SchemeRegistry registry = new SchemeRegistry(); 
    registry.register(new Scheme("http",new PlainSocketFactory(),80)); 
    //register scheme for https 
    SocketFactory https_socket = new FakeSocketFactory(); 
    registry.register(new Scheme("https", https_socket,433)); 

    HttpParams httpParams = new BasicHttpParams(); 
    //setting connection timeout. 
    HttpConnectionParams.setConnectionTimeout(httpParams, MyConstants.CONNECTION_TIMEOUT); 
    HttpConnectionParams.setSoTimeout(httpParams, MyConstants.CONNECTION_TIMEOUT); 
    return new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams,registry),httpParams); 

} 

我哪然後通過這個代碼塊

  requestQueue = Volley.newRequestQueue(getApplicationContext(),new HttpClientStack(HttpClient.getHttpsClient())); 

這也沒有幫助,我得到了同樣的答覆,如前所述。

然後我下載了一個凌空示例項目從https://github.com/ogrebgr/android_volley_examples,看看網址會在他們的項目工作,它也當我插上它沒有加載圖像。

我的問題是,爲什麼我不能夠從這個Url顯示圖像? 有什麼我可以做的補救措施?

=====編輯===== 網址變體我已經試過 http://cub.com/content/dam/B2C/enterprisebannerwebsites/Cub/CUB_WK25_HP_BackToSchool.jpg

https://cub.com/content/dam/B2C/enterprisebannerwebsites/Cub/CUB_WK25_HP_BackToSchool.jpg

https://www.cub.com/content/dam/B2C/enterprisebannerwebsites/Cub/CUB_WK25_HP_BackToSchool.jpg

這些都與一個301響應重定向到該網址https://www.cub.com/content/dam/B2C/enterprisebannerwebsites/Cub/CUB_WK25_HP_BackToSchool.jpg

我在想這個問題可能不是與URL字符串。任何人都可以從他們的Android應用程序中加載這個URL的圖像?如果是這樣,你是怎麼做到的?

回答

0

我通過chrome訪問網址,它表示這不是祕密鏈接。爲什麼不嘗試更改網址爲https://www.cub.com/content/dam/B2C/enterprisebannerwebsites/Cub/CUB_WK25_HP_BackToSchool.jpg

PS:只需將www添加到網址標頭即可。

已更新: 我使用Android-Universal-Image-Loader並尋找Document,圖像已加載!!!

enter image description here

PS:也許你所需要的網絡CA:openssl s_client -connect cub.com:443

-----BEGIN CERTIFICATE----- 
MIIFRjCCBC6gAwIBAgIQSU8lG29bDd4CR2JehPYubDANBgkqhkiG9w0BAQUFADCB 
tTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL 
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug 
YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMm 
VmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwHhcNMTMwMzA4 
MDAwMDAwWhcNMTYwMzA3MjM1OTU5WjB4MQswCQYDVQQGEwJVUzESMBAGA1UECBMJ 
TWlubmVzb3RhMRUwEwYDVQQHFAxFZGVuIFByYWlyaWUxFzAVBgNVBAoUDlNVUEVS 
VkFMVSBJTkMuMQswCQYDVQQLFAJJVDEYMBYGA1UEAxQPcmV3YXJkcy5jdWIuY29t 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlTBhdBk0FHmVmr0enoab 
19ypUxvF+C5+ITCHiY9w4nFWF7BkGzfY3DQ7NJdTK23R8XMTNW3kaZpAXYxF43zD 
zRiRgql35lYx8KrVOwJitCEMbTloCXc8LzCqNNH9y6spQoAz+Ir8sv2AekhDBmhX 
47wWtywhKWlpnYuWwpYDgdIqD9vtCWokjr6oxxz3J7/EYXgLfybubpmxSbVH4JgO 
y2VvmN+dPrsXTfottPi2t5HRivQ2haR973LvmxyK/WXUcrF29IYcBCcGzYttTjeq 
5cztsRxdy3H1OOPx3itJ0m3NRU+a51lLXNTMGZC/NVvGBy8cko4+UAvDEnPTfxWD 
6QIDAQABo4IBjDCCAYgwJwYDVR0RBCAwHoILd3d3LmN1Yi5jb22CD3Jld2FyZHMu 
Y3ViLmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggr 
BgEFBQcDAQYIKwYBBQUHAwIwQwYDVR0gBDwwOjA4BgpghkgBhvhFAQc2MCowKAYI 
KwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMwHwYDVR0jBBgw 
FoAUDURcFlNEwYJ+HSCrJfQBY9i+eaUwRQYDVR0fBD4wPDA6oDigNoY0aHR0cDov 
L1NWUlNlY3VyZS1HMy1jcmwudmVyaXNpZ24uY29tL1NWUlNlY3VyZUczLmNybDB2 
BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWdu 
LmNvbTBABggrBgEFBQcwAoY0aHR0cDovL1NWUlNlY3VyZS1HMy1haWEudmVyaXNp 
Z24uY29tL1NWUlNlY3VyZUczLmNlcjANBgkqhkiG9w0BAQUFAAOCAQEAl8bTworO 
6WUbnA1U4onCrQfScpKcRZkmWz2IOroUfwIOLNUKwigljBVZkfA6zfVnghOb8mRA 
0QX4XTCKzIi31QvT3wV4+GBD4F7iGxsi6rEG8aGLVk+rZ2Dd25Y5Lwpbnrdq59EN 
enfsqcpltCFa9E9fBe7cUvmdjBX5k2CC7nM7NiVD2oHtR0vnOx1jLARW45U5uBa7 
bBeJEFpkk//H/YvUgpEkqPHTtHw7wadhKUqS9+2dMEE7A1JNhE44TWC/C3kTHa+P 
ww0ZhHlmqAO2wAmMk+Q6iCt4Fa+rLENgvtXvoRRM0ngP6RUeEQ80+cTnHv22s8N3 
8PaBlDkOCYLySA== 
-----END CERTIFICATE----- 

後續是我用來替換BaseImageDownLoader代碼:

protected HttpsURLConnection createConnection(String url, Object extra) throws IOException { 
    String encodedUrl = Uri.encode(url, ALLOWED_URI_CHARS); 

    // Load CAs from an InputStream 
    // (could be from a resource or ByteArrayInputStream or ...) 
    CertificateFactory cf = null; 
    try { 
     cf = CertificateFactory.getInstance("X.509"); 
    } catch (CertificateException e1) { 

     // TODO Auto-generated catch block 
     e1.printStackTrace(); 

    } 
    // From https://www.washington.edu/itconnect/security/ca/load-der.crt 
    InputStream caInput = new BufferedInputStream(new FileInputStream(Environment.getExternalStorageDirectory() 
      + "/cub.crt")); 
    Certificate ca = null; 
    try { 
     try { 
      ca = cf.generateCertificate(caInput); 
      System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN()); 
     } catch (CertificateException e) { 

      // TODO Auto-generated catch block 
      e.printStackTrace(); 

     } 
    } finally { 
     caInput.close(); 
    } 

    // Create a KeyStore containing our trusted CAs 
    String keyStoreType = KeyStore.getDefaultType(); 
    KeyStore keyStore = null; 
    try { 
     keyStore = KeyStore.getInstance(keyStoreType); 
     try { 
      keyStore.load(null, null); 
      keyStore.setCertificateEntry("ca", ca); 
     } catch (NoSuchAlgorithmException e1) { 

      // TODO Auto-generated catch block 
      e1.printStackTrace(); 

     } catch (CertificateException e1) { 

      // TODO Auto-generated catch block 
      e1.printStackTrace(); 

     } 

     // Create a TrustManager that trusts the CAs in our KeyStore 
     String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
     TrustManagerFactory tmf = null; 
     try { 
      tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
      tmf.init(keyStore); 
     } catch (NoSuchAlgorithmException e1) { 

      // TODO Auto-generated catch block 
      e1.printStackTrace(); 

     } 

     // Create an SSLContext that uses our TrustManager 
     SSLContext context = null; 
     try { 
      context = SSLContext.getInstance("TLS"); 
     } catch (NoSuchAlgorithmException e) { 

      // TODO Auto-generated catch block 
      e.printStackTrace(); 

     } 
     try { 
      context.init(null, tmf.getTrustManagers(), null); 
     } catch (KeyManagementException e) { 

      // TODO Auto-generated catch block 
      e.printStackTrace(); 

     } 
     HttpsURLConnection conn = (HttpsURLConnection) new URL(encodedUrl).openConnection(); 
     conn.setConnectTimeout(connectTimeout); 
     conn.setSSLSocketFactory(context.getSocketFactory()); 
     conn.setReadTimeout(readTimeout); 
     return conn; 
    } catch (KeyStoreException e) { 

     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } 
    return null; 

}