DefaultHttpClient.execute создает исключение ClassCastException - PullRequest
0 голосов
/ 18 апреля 2019

Я работаю над приложением 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?

Может ли быть другой способ исправить исключение, которое приводит к сбою моего приложения?

...