Как узнать, когда приложение (Java) отключено от сервера (PHP) - PullRequest
0 голосов
/ 14 октября 2019

У меня есть приложение Android, которое синхронизирует данные с сервером. Сервер работает на PHP.

Порядок работы:

  1. Приложение отправляет данные на сервер.
  2. Сервер обрабатываетполученные данные.
  3. Сервер возвращает результат обработки обратно в приложение.

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

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

Я попытался на сервере проверить, все ли соединение активно, используя connection_aborted() функция, но это не помогло. Соединение всегда активно, даже когда приложение больше не работает.

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

Мой код Java для подключения к серверу:

public class Synchronize {
    public String send(String request) {
        StringBuilder response = null;
        HttpsURLConnection connection = null;
        DataOutputStream outputStream = null;
        BufferedReader reader = null;
        try {
            // Configuration connection
            connection = createConnection();
            outputStream = createOutputStream(connection, request);

            int responseCode = connection.getResponseCode();
            if (responseCode >= 200 && responseCode <= 299) {
                String line;
                reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
            }
        } catch (Exception e) {
            Log.e("Exception", "Synchronize -> send: " + e.getMessage());
        } finally {
            // Close connections
            if (connection != null) {
                connection.disconnect();
            }
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    Log.e("IOException", "Request -> send (finally 1): " + e.getMessage());
                }
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    Log.e("IOException", "Request -> send (finally 2): " + e.getMessage());
                }
            }
        }

        return response.toString();
    }

    private HttpsURLConnection createConnection() throws IOException {
        URL url = new URL(MY_SERVER);
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        connection.setRequestProperty("Accept","application/json");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        return connection;
    }

    private DataOutputStream createOutputStream(HttpsURLConnection connection, String request) throws IOException {
        DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
        outputStream.writeBytes(request);
        outputStream.flush();
        return outputStream;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...