gpt4 book ai didi

android - 使用 https 的 Volley NetworkImageView

转载 作者:行者123 更新时间:2023-11-29 17:50:34 26 4
gpt4 key购买 nike

我在我的应用程序中使用 Facebook 照片。 Facebook 照片存储在 https 网址后面。

谁能给我一个使用 https 使用 networkimageview 加载图像的示例?

最佳答案

我有类似的问题,不是 facebook,而是 https 下的图片。

除了有一个自签名证书外,还有很多重定向、cookie 管理等。所以我将 HttpClient Stack 与 Volley 结合使用,现在一切正常。

也许这对您的问题有帮助。您可以跳过所有您不感兴趣的部分。

以下代码部分复制,包括代码注释,并改编自this answer通过 kuester2000this one通过 Jens .

初始化HttpClient(不需要的可以跳过)

// Create and initialize HTTP parameters
HttpParams params = new BasicHttpParams();
HttpClientParams.setRedirecting(params, true );

// Set the timeout in milliseconds until a connection is established.
HttpConnectionParams.setConnectionTimeout( params, 5000 );

// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
HttpConnectionParams.setSoTimeout( params, 10000 );

// The params are read in the ctor of the pool constructed by
// ThreadSafeClientConnManager, and need to be set before constructing it.
ConnManagerParams.setMaxTotalConnections(params, 15);
ConnPerRoute cpr = new ConnPerRoute() {
@Override
public int getMaxForRoute(HttpRoute httpRoute) { return 5; }
};

ConnManagerParams.setMaxConnectionsPerRoute(params, cpr);

HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);

// Create and initialize scheme registry
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register( new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));

/* Since I'm in a development environment I need to trust self-signed certs */
SSLSocketFactory sslSocketFactory = null;
try {
X509TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] xcs, String string)
throws CertificateException { }

public void checkServerTrusted(X509Certificate[] xcs, String string)
throws CertificateException { }

public X509Certificate[] getAcceptedIssuers() { return null; }
};

SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[]{tm}, null);

sslSocketFactory = new TrustAllSSLSocketFactory(ctx);
if (sslSocketFactory != null)
sslSocketFactory.setHostnameVerifier(
SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

} catch (Exception ex) {
Log.e(TAG, ex.getMessage(), ex);
sslSocketFactory = null;
}

if (sslSocketFactory == null) {
sslSocketFactory = SSLSocketFactory.getSocketFactory();
sslSocketFactory.setHostnameVerifier(
SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
}

schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));

// Create an HttpClient with the ThreadSafeClientConnManager.
// This connection manager must be used if more than one thread will
// be using the HttpClient.
ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);

DefaultHttpClient client = new DefaultHttpClient(cm, params);

HttpProtocolParams.setUseExpectContinue(client.getParams(), false);

HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {
public boolean retryRequest(IOException exception, int executionCount,
HttpContext context) {
// retry a max of 5 times
if(executionCount >= 5) { return false; }
if(exception instanceof NoHttpResponseException){
return true;
} else if (exception instanceof ClientProtocolException){
return true;
}
return false;
}
};

client.setHttpRequestRetryHandler(retryHandler);

/* Cookie Management */
CookiesStore cookieStore = new BasicCookieStore();
client.setCookieStore(cookieStore);

在 Volley 中使用 HttpClient

/* Use HttpClientStack with Volley */
mRequestQueue = Volley.newRequestQueue(
context.getApplicationContext(), new HttpClientStack(client));

TrustAllSSLSocketFactory.java

static final
private class TrustAllSSLSocketFactory extends SSLSocketFactory {

private SSLContext sslContext = SSLContext.getInstance("TLS");

public TrustAllSSLSocketFactory(KeyStore truststore)
throws NoSuchAlgorithmException,
KeyManagementException,
KeyStoreException, UnrecoverableKeyException {
super(truststore);

TrustManager tm = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() { return null; }

@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException { }

@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException { }
};

sslContext.init(null, new TrustManager[] { tm }, null);
}

public TrustAllSSLSocketFactory(SSLContext context)
throws KeyManagementException,
NoSuchAlgorithmException, KeyStoreException,
UnrecoverableKeyException {
super(null);
sslContext = context;
}

@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
throws IOException, UnknownHostException {
return sslContext.getSocketFactory()
.createSocket(socket, host, port, autoClose);
}

@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
};

关于android - 使用 https 的 Volley NetworkImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23133465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com