Android WebView LoadUrl не ждет еще одного вызова, чтобы закончитьAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android WebView LoadUrl не ждет еще одного вызова, чтобы закончить

Сообщение 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)
{
}
}



Подробнее здесь: https://stackoverflow.com/questions/797 ... -to-finish
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»