我有一个关于学校期末作业的问题,所以我在请求位置请求权限的时候遇到了问题,当这些权限都可以的时候,位置和前端都可以显示,不可以的时候,显示错误,问题是这个函数是异步的,所以它不等待位置允许的响应,所以,它会立即显示错误信息。有人知道如何解决这个问题吗?真诚的。
namespace Eindproject.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Stations : ContentPage
{
public Stations()
{
InitializeComponent();
// Check for location permission before getting location
if (CheckLocationPermission())
{
// Load frontend
frontend();
}
else
{
// Ask for permission
RequestLocationPermission();
// check again
if (CheckLocationPermission())
{
// Load frontend
frontend();
}
else
{
// Show error
DisplayAlert("Error", "Location permission is required", "OK");
}
}
}
private async void RequestLocationPermission()
{
// Ask for permission
await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
}
private bool CheckLocationPermission()
{
// Check if permission is granted
if (PermissionStatus.Granted == Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>().Result)
{
return true;
}
else
{
return false;
}
}
private async void frontend()
{
// Get location
Location location = await DataRepository.GetLocationAsync();
// Get stations
List<IcaoStation> stations = await DataRepository.GetNearbyStationsAsync(location.Latitude, location.Longitude);
// Set source
lvwCollectibleItems.ItemsSource = stations;
}
}
}
1条答案
按热度按时间lp0sw83n1#
将实际代码从构造函数移到
Loaded
、NavigatedTo
或Appearing
等事件的相应事件处理程序。将这些事件处理程序声明为async,然后可以在async
方法RequestLocationPermission
上使用await
,以延迟以下代码,直到结果可用。您还应该将
CheckLocationPermission
声明为async
,并在CheckStatusAsync
上使用await
,而不是访问任务的Result
属性。