Я работаю над приложением Android, которое использует DefaultHttpClient
. В некоторых устройствах при выполнении запроса с моим клиентом происходит сбой приложения. Это исключение:
E/ExceptionHandler: java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:354)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassCastException: $Proxy1 cannot be cast to org.apache.http.message.BasicHttpResponse
Когда я начал отладку, я заметил, что используемый мной DefaultHttpClient
имеет разные атрибуты на тех устройствах, где происходит сбой приложения. Я думаю, что это может быть проблемой, поскольку DefaultHttpClient
устарела, поэтому я пытаюсь изменить HttpClient.
Моя текущая реализация DefaultHttpClient
следующая:
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
return new DefaultHttpClient(ccm, params);
Мне нужно поменять DefaultHttpClient
на HttpClientBuilder.create().build()
. Как я могу установить ClientConnectionManager
и HttpParams
для моего нового HttpClient
?
Есть ли другой способ установить текущие свойства для моего нового HttpClient
?
Может ли быть другой способ исправить исключение, которое приводит к сбою моего приложения?