Обходной путь, чтобы не выключать DefaultHttpClient () каждый раз после использования - PullRequest
4 голосов
/ 18 января 2011

Каждый раз, когда я делаю запрос Http, я вызываю этот метод

private JSONObject getRequest(HttpUriRequest requestType) {
        httpClient = new DefaultHttpClient(); // Creating an instance here
        try {
            httpResponse = httpClient.execute(requestType); 
            if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == 200) {
                httpEntity = httpResponse.getEntity();

                if (httpEntity != null) {
                    InputStream instream = httpEntity.getContent(); 
                    String convertedString = convertStreamToString(instream);
                    return convertToJSON(convertedString);
                } else return null;

            } else return null;
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } finally {
            httpClient.getConnectionManager().shutdown(); // Close the instance here
        }
    }

Поэтому каждый раз, когда я создаю new DefaultHttpClient() объект и закрываю его после использования. Если я не закрою его, у меня будут многочисленные проблемы с моим приложением (Android). У меня есть предчувствие, что это не самая дешевая операция, и мне нужно как-то ее улучшить. Можно ли как-то очистить соединение, чтобы мне не нужно было каждый раз вызывать метод выключения?

1 Ответ

8 голосов
/ 18 января 2011

Я уверен, что вы можете повторно использовать тот же объект httpClient после обработки запроса. Вы можете посмотреть Эта программа , чтобы увидеть код ссылки.

Просто убедитесь, что после выполнения каждого запроса вы удаляете объекты из объекта ответа. Что-то вроде:

        // Must call this to release the connection
        // #1.1.5 @
        // http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html
        HttpEntity enty = response.getEntity();
        if (enty != null)
            enty.consumeContent();

Кстати, с какими проблемами вы столкнетесь, если не отключите соединение mgr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...