Bonjour, J'utilise la classe DefaultHTTPClient pour créer une requête http.Problème Android 6.0 HTTPClient avec le téléphone LG G3
La méthode execute() du code courant fonctionne sur tous les téléphones, y compris Nexus et Samsung avec Android 6.0.
Mais quand je l'ai testé sur les téléphones LG avec Android 6.0 mise à jour, je reçois l'erreur comme indiqué ci-dessous
Java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
03-28 17:21:17.040: E/xx_SDK(14035): at org.apache.http.impl.auth.DigestScheme.isGbaScheme(DigestScheme.java:210)
03-28 17:21:17.040: E/xx_SDK(14035): at org.apache.http.impl.auth.DigestScheme.processChallenge(DigestScheme.java:176)
03-28 17:21:17.040: E/xx_SDK(14035): at org.apache.http.impl.client.DefaultRequestDirector.processChallenges(DefaultRequestDirector.java:1097)
03-28 17:21:17.040: E/xx_SDK(14035): at org.apache.http.impl.client.DefaultRequestDirector.handleResponse(DefaultRequestDirector.java:980)
03-28 17:21:17.040: E/xx_SDK(14035): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:490)
03-28 17:21:17.040: E/xx_SDK(14035): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
03-28 17:21:17.040: E/xx_SDK(14035): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
03-28 17:21:17.040: E/xx_SDK(14035): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
03-28 17:21:17.040: E/xx_SDK(14035): at java.lang.Thread.run(Thread.java:818)
J'ai essayé de comprendre ce problème, il parle de l'authentification Digest.
Je sais d'Android 6.0, ils ont supprimé le client Apache Http et utilise maintenant la classe HttpURLConnection
J'ai essayé de copier le « org.apache.http.legacy.jar » fichier de sdk à mon projet lib . Mais je suis toujours confronté au même journal d'erreurs. J'espère que quelqu'un pourra m'aider à m'intéresser à ce problème.
Veuillez trouver le code d'application comme il est:
HttpParams params = new BasicHttpParams();
ClientConnectionManager connectionManager = null;
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
connectionManager = new SingleClientConnManager(params, registry);
}
catch (Exception e)
{
Log.e(TAG, Log.getStackTraceString(e));
}
ConnManagerParams.setTimeout(params, mTimeOut);
HttpConnectionParams.setSoTimeout(params, mTimeOut);
HttpConnectionParams.setConnectionTimeout(params, mTimeOut);
HttpConnectionParams.setTcpNoDelay(params, true);
DefaultHttpClient client = new DefaultHttpClient(connectionManager, params);
client.getCredentialsProvider().setCredentials(new AuthScope(host,port),
new UsernamePasswordCredentials(userID,passowrd));
client.setRedirectHandler(new RedirectHandler() {
@Override
public boolean isRedirectRequested(HttpResponse response, HttpContext context) {
}
@Override
public URI getLocationURI(HttpResponse response, HttpContext context) throws ProtocolException {
}
try {
HttpGet httpget = new HttpGet(url);
HttpResponse response = client.execute(httpget); // issue occur here
je la bibliothèque selon la spécification Android 6.0. useLibrary "org.apache.http.legacy.jar". Ce que je vois, c'est qu'il envoie la requête http. le serveur répond avec le code 401 et nous envoyons à nouveau avec l'authentification Digest. Si vous voyez le journal des erreurs, je ressens un problème avec les paramètres de Digest. En attendant pouvez-vous me dire comment utiliser votre nouveau code. Je ne peux pas comprendre comment changer le DefaultClient. Votre deuxième point n'est pas clair – Sunil
J'utilisais également le pot hérité, mais recevais toujours l'erreur * seulement sur LG G5 et LG G3 *. Je ne vois pas de code exemple, donc je suppose que vous avez un endroit où vous utilisez le 'DefaultHttpClient' de la bibliothèque apache. Si vous ajoutez la nouvelle dépendance, vous devez mettre à jour le code dans lequel vous utilisez 'DefaultHttpClient' pour utiliser le' HttpClientBuilder' avant de faire la demande. Cela utilisera le nouveau code dans 'httpclient-android' et devrait gérer correctement les paramètres de résumé. – jfred
Merci beaucoup pour vos commentaires. Je suis vraiment heureux de voir votre soutien. C'est un problème très important pour moi. Selon votre commentaire, j'ai mis à jour mon code d'application. Maintenant, vous pouvez voir le code ci-dessus.KIndly me soutenir sur la façon de changer ce code selon le HttpClientBuilder. – Sunil