У меня есть приложение для Android .net (мигрировано из Xamarin), и внутри него есть веб -просмотр, который отображает веб -приложение, а также у меня есть служба переднего плана Android, которая периодически вызывает API для синхронизации некоторых данных на устройстве. Служба переднего плана использует httpclient для выполнения вызовов (только), и в зависимости от размера данных, который вызов HTTP от службы переднего плана может занять несколько секунд, чтобы получить ответ. Во время этого вызова WebView.LoadUrl не загружает какие -либо данные, пока HTTPClient из службы переднего плана не завершит запрос. Это проблема, и я не знаю, что происходит < /p>
Вот моя инициализация WebView внутри MainActivity: < /p>
web = FindViewById("myWebView");
web.Settings.LoadsImagesAutomatically = true;
web.Settings.JavaScriptEnabled = true;
web.Settings.JavaScriptCanOpenWindowsAutomatically = true;
web.Settings.DomStorageEnabled = true;
web.Settings.SaveFormData = false;
web.Settings.SetGeolocationEnabled(true);
web.Settings.UserAgentString = $"{GetType().Assembly.GetName()}";
var client = new MyWebViewClient(this);
_web.SetWebViewClient(client);
_web.SetWebChromeClient(new MyWebChromeClient());
< /code>
Я попытался создать один экземпляр для httpclient, но без успеха. Вызов httpclient является асинхронным, и я использую таймер для периодического вызова API для данных. < /P>
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
try
{
_timer = new Timer(_ => _ = TrySyncPaymentsAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(40));
return StartCommandResult.Sticky;
}
catch (Exception e)
{
Console.WriteLine(e);
return StartCommandResult.NotSticky;
}
}
public async Task TrySyncPaymentsAsync()
{
try
{
var httpClient = new HttpClient();
var url = $"{targetUrlBase}/data/get";
var request = new EnhancedHttpRequestMessage(HttpMethod.Get, url, [new MediaTypeWithQualityHeaderValue("text/json")]);
var response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -to-finish
Android WebView LoadUrl не ждет еще одного вызова, чтобы закончить ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1757236514
Anonymous
У меня есть приложение для Android .net (мигрировано из Xamarin), и внутри него есть веб -просмотр, который отображает веб -приложение, а также у меня есть служба переднего плана Android, которая периодически вызывает API для синхронизации некоторых данных на устройстве. Служба переднего плана использует httpclient для выполнения вызовов (только), и в зависимости от размера данных, который вызов HTTP от службы переднего плана может занять несколько секунд, чтобы получить ответ. Во время этого вызова WebView.LoadUrl не загружает какие -либо данные, пока HTTPClient из службы переднего плана не завершит запрос. Это проблема, и я не знаю, что происходит < /p>
Вот моя инициализация WebView внутри MainActivity: < /p>
web = FindViewById("myWebView");
web.Settings.LoadsImagesAutomatically = true;
web.Settings.JavaScriptEnabled = true;
web.Settings.JavaScriptCanOpenWindowsAutomatically = true;
web.Settings.DomStorageEnabled = true;
web.Settings.SaveFormData = false;
web.Settings.SetGeolocationEnabled(true);
web.Settings.UserAgentString = $"{GetType().Assembly.GetName()}";
var client = new MyWebViewClient(this);
_web.SetWebViewClient(client);
_web.SetWebChromeClient(new MyWebChromeClient());
< /code>
Я попытался создать один экземпляр для httpclient, но без успеха. Вызов httpclient является асинхронным, и я использую таймер для периодического вызова API для данных. < /P>
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
try
{
_timer = new Timer(_ => _ = TrySyncPaymentsAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(40));
return StartCommandResult.Sticky;
}
catch (Exception e)
{
Console.WriteLine(e);
return StartCommandResult.NotSticky;
}
}
public async Task TrySyncPaymentsAsync()
{
try
{
var httpClient = new HttpClient();
var url = $"{targetUrlBase}/data/get";
var request = new EnhancedHttpRequestMessage(HttpMethod.Get, url, [new MediaTypeWithQualityHeaderValue("text/json")]);
var response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79758033/android-webview-loadurl-is-not-waiting-for-another-call-to-finish[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия