ANDROID - соединение не сохраняется при изменении активности

Я разрабатываю приложение, которое входит на сервер tomcat. Для этого я использую запрос HTTP GET, и при успешном соединении сообщение отображается через буферизованный поток.

Следующий код используется для подключения.

public String getInternetData() throws Exception {


BufferedReader in = null;
String data = null;

try {
    HttpClient client = new DefaultHttpClient();
    client.getConnectionManager().getSchemeRegistry().register(getMockedScheme());
    URI website = new URI("https://ts.rks.com:8443/kss/login?username=hydm&password=pw1234"); 
    HttpGet request = new HttpGet();
    request.setURI(website);
    HttpResponse response = client.execute(request);
    response.getStatusLine().getStatusCode();

    in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    StringBuffer sb = new StringBuffer("");
    String l = "";
    String nl = System.getProperty("line.separator");
    while ((l = in.readLine()) != null) {
        sb.append(l + nl);
    }
    in.close();
    data = sb.toString();
    return data;
} finally {
    if (in != null) {
        try {
            in.close();
            return data;
        } catch (Exception e) {
            Log.e("GetMethodLogin", e.getMessage());
        }
    }
}

Это код, который активируется, когда пользователь входит в систему через действие входа. Когда я возвращаюсь к экрану меню и пытаюсь запустить другое действие, которое требует, чтобы пользователь вошел в систему, он говорит, что пользователь не вошел в систему.

Отключается ли соединение, когда пользователь уходит от действия, или я неправильно устанавливаю соединение.


person Hydar Roze    schedule 14.01.2013    source источник


Ответы (2)


На самом деле вам нужно изменить две вещи, а не одну.

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

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

Таким образом, ответ заключается в том, что вы должны делать это, используя один из механизмов фоновой обработки потоков, и делать это внутри службы.

person Chris Stratton    schedule 14.01.2013

Соединение не будет сохраняться, когда действие перемещается в фоновый режим. Я не могу сказать из вашего опубликованного кода, но я считаю, что вы должны использовать AsyncTask для этого соединения. Это исходит из моего опыта извлечения исходного кода HTML из ссылки.

Этот вопрос может ответить на ваш: Что делать с AsyncTask в onPause()?

person juicebyjustin    schedule 14.01.2013