Как решить ошибку «Недопустимое использование BasicClientConnManager: убедитесь, что вы освободили соединение до выделения другого» в Android?

Здесь я пытаюсь выполнить POST некоторые данные с мобильного на сервер. Для этого сначала мне нужно войти в систему для аутентификации на сервере. То после отправки данных через POST-запрос я проверил этот связанный с этим вопрос о стеке. HttpClient 4.0.1 – как освободить соединение?

Я пробовал все эти методы один за другим.

1.EntityUtils.consume (юридическое лицо);

2.is.close ();

  1. . Response.getEntity () consumeContent (); // в том, что consumeContent () показывает, что устарел

  2. post.abort ();

Вот мой подробный код в ссылках pastebin, пожалуйста, проверьте это.

Вот программный поток.

  1. Первый логин называется « Проверить ЗДЕСЬ».

  2. После входа в систему и перед публикацией идеи вызывается этот метод.

  3. И, наконец, вызывается метод post idea .

    Но logcat показывает мне ошибку:

    Java.lang.IllegalStateException: Недопустимое использование BasicClientConnManager: соединение все еще выделено.

    Обязательно отпустите соединение, прежде чем выделять другой

W/System.err( 2217): java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated. W/System.err( 2217): Make sure to release the connection before allocating another one. W/System.err( 2217): at ch.boye.httpclientandroidlib.impl.conn.BasicClientConnectionManager.getConnection(BasicClientConnectionManager.java:161) W/System.err( 2217): at ch.boye.httpclientandroidlib.impl.conn.BasicClientConnectionManager$1.getConnection(BasicClientConnectionManager.java:138) W/System.err( 2217): at ch.boye.httpclientandroidlib.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:455) W/System.err( 2217): at ch.boye.httpclientandroidlib.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:902) W/System.err( 2217): at ch.boye.httpclientandroidlib.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:801) W/System.err( 2217): at ch.boye.httpclientandroidlib.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:780) W/System.err( 2217): at com.rahul.cheerfoolz.api.util.postData(util.java:436) W/System.err( 2217): at com.rahul.cheerfoolz.postidea.idea.post_myidea_edit$Post_Idea.doInBackground(post_myidea_edit.java:354) W/System.err( 2217): at com.rahul.cheerfoolz.postidea.idea.post_myidea_edit$Post_Idea.doInBackground(post_myidea_edit.java:1) W/System.err( 2217): at android.os.AsyncTask$2.call(AsyncTask.java:185) W/System.err( 2217): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) W/System.err( 2217): at java.util.concurrent.FutureTask.run(FutureTask.java:138) W/System.err( 2217): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) W/System.err( 2217): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) W/System.err( 2217): at java.lang.Thread.run(Thread.java:1019) 

Когда вы создаете DefaultHttpClient с указанием любого ClientConnectionManager, он будет создавать по умолчанию BasicClientConnectionManager, и если вы проверите javadoc, он скажет:

Менеджер соединений для одного соединения. Этот диспетчер соединений поддерживает только одно активное соединение за раз. Несмотря на то, что этот класс является потокобезопасным, он должен использоваться только одним потоком выполнения. BasicClientConnManager будет пытаться повторно использовать соединение для последующих запросов с тем же маршрутом. Тем не менее, он закрывает существующее соединение и открывает его для данного маршрута, если маршрут постоянного соединения не совпадает с маршрутом запроса соединения. Если соединение уже было отправлено, IllegalStateException выбрано.

Попробуйте настроить PoolingClientConnectionManager с настраиваемой конфигурацией для ваших нужд. См. Простой пример:

 PoolingClientConnectionManager cxMgr = new PoolingClientConnectionManager( SchemeRegistryFactory.createDefault()); cxMgr.setMaxTotal(100); cxMgr.setDefaultMaxPerRoute(20); 

Это справедливо для HttpClient 4.2, поскольку ThreadSafeClientConnManager устарел для этой версии. Надеюсь это поможет.