время ожидания клиента для API Android - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть приложение для Android, которое делает запросы к API, используя Retrofit.Все работает нормально, но у меня есть одна проблема, если кто-нибудь может уточнить это мне.

В Android я создал OkHttpClient следующим образом:

    private static OkHttpClient getClient() {

    final OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .readTimeout(60, TimeUnit.SECONDS)
            .connectTimeout(60, TimeUnit.SECONDS)
            .build();

    return okHttpClient;
}

И я вызываю клиента какследует:

    public static IAPI getAPITest() {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://***/api/")
            .addConverterFactory(GsonConverterFactory.create())
            .client(getClient())
            .build();

    iApi = retrofit.create(IAPI .class);
    return iApi;
}

Итак, из того, что я понял, клиент может ждать ответа от серверной части в течение 1 минуты.

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

В Android отобразится сообщение, например, «(что-то пошло не так - попробуйте еще раз), в то время как на заднем плане процесс все еще идет, и в конце он вставит данные, верно?

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

В заключение, данные были представлены дважды, и я этого не хочу.

Как мы можем избежать такой ситуации? Или этого никогда не произойдет? .. Поправь меня, если я ошибаюсь

Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2019

Я разрабатываю здесь свой комментарий;

Допустим, у вас есть таблица на вашем сервере, где вы храните все запросы, сделанные на ваш сервер.В одном столбце должен быть уникальный идентификатор каждого запроса, например, UUID, отправляемый с вашего устройства Android.

В вашем устройстве Android вы помещаете UUID.randomUUID().toString() в заголовок / тело каждого запроса, направленного на вашserver.

Когда сервер получает запрос, он проверит в таблице, соответствует ли полученный UUID любому из UUID, которые есть в таблице, и если он найдет один, это означает, что это дублированные данные иВы можете отправить сообщение обратно, что данные уже были вставлены.

Если он не найдет их, это означает, что это новые данные, и сервер сохранит этот новый UUID в таблице, а также необходимую информациюдля вашего бизнеса.

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