Android: Le schéma 'http' n'est pas enregistré sur ICS 4.0.4 w / proxy

Je suis en utilisant HttpClient pour les requêtes HTTPS, qui a bien fonctionné jusqu'à maintenant. Après la mise à jour ICS, certains utilisateurs signalent des problèmes de connexion en 3G connexions.

EDIT: la Plupart d'entre eux semblent être l'aide d'un proxy, et je peux reproduire ce local avec un T-Mobile SIM à l'aide de leur procuration.

Les journaux ont cette trace de la pile:

java.lang.IllegalStateException: Scheme 'http' not registered.
org.apache.http.conn.scheme.SchemeRegistry.getScheme(SchemeRegistry.java:80)
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:126)
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

Notre point de terminaison est HTTPS uniquement, afin de ne pas enregistrer un point de terminaison HTTP dans notre SchemeRegistry sur le but. Il n'y a pas n'importe où (à ma connaissance) où nous avons redirection HTTP.

Voici le code qui met en place le HttpClient pour le client HTTPS:

    DefaultHttpClient ret = null;

    //sets up parameters
    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(params, "utf-8");
    params.setBooleanParameter("http.protocol.expect-continue", false);

    HttpConnectionParams.setConnectionTimeout(params, DEFAULT_CONN_TIMEOUT_MSEC);
    HttpConnectionParams.setSoTimeout(params, timeoutMsec);
    HttpConnectionParams.setStaleCheckingEnabled(params, true);

    SchemeRegistry registry = new SchemeRegistry();
    final SocketFactory sslSocketFactory = getPreferredSSLSocketFactory();
    registry.register(new Scheme("https", sslSocketFactory, 443));

    ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
    ret = new DefaultHttpClient(manager, params);
    //for preemptive authentication
    //http://dlinsin.blogspot.com/2009/08/http-basic-authentication-with-android.html
    ret.addRequestInterceptor(preemptiveAuth, 0);
    ret.setCookieStore(communalCookieJar);

    SimpleCredentialsProvider credProvider = new SimpleCredentialsProvider(getAccountPreferences());
    ret.setCredentialsProvider(credProvider);

    return ret;

Remarque: Nous partageons cette HttpClient exemple entre plusieurs threads.

source d'informationauteur sehugg