Перейти к содержанию
Fire Monkey от А до Я
  • 0

THTTPClient эмуляция синхронности


Mark Lobanov

Вопрос

Добрый день, вопрос от newbie

В процессе портирования приложения с винды планирую эмулировать синхронность вызовов THTTPClient примерно таким образом - см. под спойлер ... (использовать события пока не хочу)
Под виндой код работает без ошибок, под андроидом на вызове LAsyncResult.AsyncWaitEvent.WaitFor получаю ошибку Activity not found, maybe you are in a service.
Подскажите, пожалуйста, что я делаю не так ?

Спойлер
fClient := THTTPClient.Create;
fClient.AllowCookies := True;
fClient.HandleRedirects := True;
fClient.Accept := 'application/json';
fClient.ContentType := 'application/json';
fClient.AcceptEncoding := '*/*';
fClient.AcceptCharSet := 'utf-8';
...
LAsyncResult := fClient.BeginPost(LUrl, LRequest); // LAsyncResult: IAsyncResult;

LAsyncResult.AsyncWaitEvent.WaitFor( fCallTimeOut ); // !!! error

LResponse := THTTPClient.EndAsyncHTTP( LAsyncResult );
// далее - работа с респонсом

 

Embarcadero® RAD Studio 10.4 Version 27.0.40680.4203

Xiaomi Redme Note 4x, Pixel Experience, Android 10

Изменено пользователем Mark Lobanov
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
34 минуты назад, Mark Lobanov сказал:

Разве использование синхронных методов есть хороший тон для андроид?

вообще замораживать пользовательский интерфейс на время запроса плохая идея для любой ОС... но вы же это и хотите? у андроида есть ограничения на запросы в основном потоке приложения, поэтому запрос запустится в отдельном потоке (так сделано в реализации http клиента для андроида "внутри")... поэтому андроид не будет против вызова данной синхронной операции... (см. реализацию THTTPClient.ExecuteHTTP() в модуле System.Net.HttpClient)

1349656346_.thumb.png.4c6061be315e65124881db22e5c7a64a.png

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

 

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...