我如何使json查询等待电话's位置
本文关键字:位置 电话 等待 何使 json 查询 | 更新日期: 2023-09-27 18:18:35
这里我试图发送一个带有纬度和经度的json查询,但这些值将作为NaN,即使我调用ShowMyLocationOnTheMap,它首先检索电话位置。我如何使showMyLocation方法首先完成,然后调用json查询。你能帮我吗?
public partial class ClosestBusStops : PhoneApplicationPage
{
WebClient webClient;
public ClosestBusStops()
{
InitializeComponent();
ShowMyLocationOnTheMap(GeoPositionAccuracy.Default);
webClient = new WebClient();
webClient.DownloadStringCompleted += webClient_DownloadStringCompleted;
string jsonQuery= "www.blabla.com?lat="+App.lat+"&lng="+App.lng;
webClient.DownloadStringAsync(new Uri(jsonQuery));
}
private async void ShowMyLocationOnTheMap(GeoPositionAccuracy accuracy)
{
Geolocator myGeolocator = new Geolocator();
Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
GeoCoordinate myGeoCoordinate = CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
App.lat = myGeoCoordinate.Latitude;
App.lng = myGeoCoordinate.Longitude;
this.pushPin(this.mapWithMyLocation, myGeoCoordinate);
}
}
更新protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
await ShowMyLocationOnTheMap(GeoPositionAccuracy.Default);
}
private async Task ShowMyLocationOnTheMap(GeoPositionAccuracy accuracy)
{
Geolocator myGeolocator = new Geolocator();
Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
GeoCoordinate myGeoCoordinate = CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
App.lat = myGeoCoordinate.Latitude;
App.lng = myGeoCoordinate.Longitude;
this.pushPin(this.mapWithMyLocation, myGeoCoordinate);
}
ShowMyLocationOnTheMap
是一个异步方法,所以如果你想等待这个方法的完成,你需要使用await
关键字,像这样:
await ShowMyLocationOnTheMap(GeoPositionAccuracy.Default);
因为你不能在构造函数中使用await,你需要把它移到其他地方,比如OnNavigatedTo
方法或Loaded
事件处理程序。
ShowMyLocationOnTheMap
的返回类型也应该是Task
而不是void
。
public ClosestBusStops()
{
InitializeComponent();
}
private async Task ShowMyLocationOnTheMap(GeoPositionAccuracy accuracy)
{
Geolocator myGeolocator = new Geolocator();
Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
App.lat = myGeoCoordinate.Latitude;
App.lng = myGeoCoordinate.Longitude;
this.pushPin(this.mapWithMyLocation, myGeoCoordinate);
}
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
await ShowMyLocationOnTheMap(GeoPositionAccuracy.Default);
webClient = new WebClient();
webClient.DownloadStringCompleted += webClient_DownloadStringCompleted;
string jsonQuery= "www.blabla.com?lat="+App.lat+"&lng="+App.lng;
webClient.DownloadStringAsync(new Uri(jsonQuery));
}