Уничтожение или закрытие HttpClient Android

1

У меня проблема, я думаю, что это может относиться к HttpClient. Я вхожу на сайт и извлекаю данные из него с помощью JSoup. Все работает нормально. Вот моя проблема, когда я хочу войти в другую учетную запись, она отображает те же данные из другой учетной записи. Только когда я убью приложение, я могу войти с разными учетными данными. Я думаю, что моя сессия с веб-сайтом все еще хранится в одном и том же HttpClient и не позволит мне снова войти в систему с другой учетной записью, если я не выйду из системы. Какой был бы лучший способ исправить эту проблему? Использование метода HttpGet для выполнения сценария выхода из системы? Или есть способ сбросить HttpCLient. Благодарю. Код:

public void parseDoc() {
    new Thread(new Runnable() {

        @Override
        public void run() {
            final HttpParams params = new BasicHttpParams();
            HttpClientParams.setRedirecting(params, true);
            httpclient = new DefaultHttpClient();

            HttpPost httppost = new HttpPost(
                    "https://secure.groupfusion.net/processlogin.php");
            String HTML = "";
            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                        3);
                nameValuePairs
                        .add(new BasicNameValuePair(
                                "referral_page",
                                "/modules/gradebook/ui/gradebook.phtml?type=student_view&jli=t&jli=t&jli=t&jli=t&jli=t&jli=t&printable=FALSE&portrait_or_landscape=portrait"));
                nameValuePairs.add(new BasicNameValuePair("currDomain",
                        "beardenhs.knoxschools.org"));
                nameValuePairs.add(new BasicNameValuePair("username",
                        username.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("password",
                        password.getText().toString()));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                HttpResponse response = httpclient.execute(httppost);

                HTML = EntityUtils.toString(response.getEntity());
                Document doc = Jsoup.parse(HTML);
                Element link = doc.select("a").first();
                String linkHref = link.attr("href");
                HttpGet request = new HttpGet();
                try {
                    request.setURI(new URI(linkHref));

                } catch (URISyntaxException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                response = httpclient.execute(request);

                InputStream in = response.getEntity().getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(in));
                StringBuilder str = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    str.append(line);
                }
                in.close();
                HTML = str.toString();
                doc = Jsoup.parse(HTML);
                Elements divs = doc.getElementsByTag("tbody");
                for (Element d : divs) {
                    if (i == 2) {
                        finishGrades();
                        break;
                    }
                    i++;
                    ggg = d.html();

                }

            } catch (ClientProtocolException e) {
            } catch (IOException e) {
            }

        }
    }).start();

}
  • 0
    Приложение все еще находится в памяти, поэтому, только когда приложение убито, вы получаете новые данные для нового логина. Создать возможность удалять учетные данные или хранить учетные данные. При каждом запуске у вас появляются новые экземпляры HttpClient, которые не будут проблемой.
  • 0
    У вас есть возможность хранить учетные данные, используя «Запомнить меня?» Я добавил в приложение. Я не хочу, чтобы пользователь должен был убить приложение, чтобы кто-то еще мог войти в систему со своими учетными данными. В любом случае вокруг этого? Благодарю.
Показать ещё 6 комментариев
Теги:
httpclient
http-get

3 ответа

4
Лучший ответ

Вы можете вызвать httppost.abort();

  • 0
    Спасибо за ответ, но до сих пор нет. Это действительно странно, и я не могу понять, в чем проблема. Я знаю, что HttpClient ведет мой сеанс с веб-сайтом, иначе я бы даже не смог войти в систему и перейти на определенные страницы. Спасибо
1

У меня возникла аналогичная проблема, хотя я использую один экземпляр HttpClient для всего приложения (Singleton). Поэтому в этом случае, если вы используете превентивную аутентификацию, вы можете просто сделать это для экземпляра клиента всей приложения (например, если пользователь выходит из системы):

public void logOut() {
  // keep in mind, 'httpClient' is final and set once in the constructor (Singleton)
  httpClient.getCredentialsProvider().clear();
  httpClient.getCookieStore().clear(); // important
}

См. Также: HttpClient State Management

0

Я бы предложил настроить заголовок "no-cache" httpclient на false и попробовать. Не гарантированное решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню