java - LG G3 手机的 Android 6.0 HTTPClient 问题

标签 java android eclipse apache-httpclient-4.x android-6.0-marshmallow

您好,我正在使用 DefaultHTTPClient 类来创建 http 请求。

当前代码的execute()方法适用于所有手机,包括搭载Android 6.0的Nexus和Samsung。

但是当我在安装了 Android 6.0 更新的 LG 手机上进行测试时,出现如下错误

 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)

我试图了解什么问题,它谈论摘要式身份验证。

我知道从 Android 6.0 开始,他们已经删除了 Apache Http 客户端,现在使用 HTTPUrlConnection 类

我尝试将“org.apache.http.legacy.jar”文件从 sdk 复制到我的项目 lib 文件夹。

但我仍然面临相同的错误日志。我希望有人可以帮助我解决这个问题。

请找到应用程序代码:

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

最佳答案

遇到类似的问题并尝试将其添加到 another question


我今天遇到了类似的问题,刚刚开始使用 HttpClient for Android

  1. 添加了依赖项compile 'org.apache.httpcomponents:httpclient-android:4.3.5.1'到build.gradle。
  2. new DefaultHttpClient() 替换为 HttpClientBuilder.create().build()

您可能需要在代码的其他部分进行一些其他小的重构,但这应该非常简单。

关于java - LG G3 手机的 Android 6.0 HTTPClient 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36262232/

相关文章:

java - HDR直方图: Min not same as Max on 1 sample count

java - Android,内部有多个 View 的滚动菜单 - 来自 XML 的 View

java - 如何向基于 java 的网站添加录音 - 最好是开源解决方案

java - 安卓 : How to pause and resume runnable thread?

android - 编辑文本背景为直线

eclipse - 如何更改eclipse中 "run as"菜单中选项的顺序?

Java读取图像但返回null

java - R.java 保留对不存在的资源 ID 的引用

Java ee7 websockets 服务器端点不工作

java - flutter 安卓错误: How to extends MainActivity from "Two Packages"