如何让我的 json 查询等待手机的位置?
Posted
技术标签:
【中文标题】如何让我的 json 查询等待手机的位置?【英文标题】:How can I make my json query wait for phone's location? 【发布时间】:2014-08-18 14:26:23 【问题描述】:在这里,我试图发送一个带有纬度和经度的 json 查询,但即使我调用 ShowMyLocationOnTheMap 来首先检索电话位置,这些值也会显示为 NaN。如何让 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);
【问题讨论】:
【参考方案1】: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));
希望这会有所帮助。
【讨论】:
我照你说的做了,但给出了这个错误:错误'await'运算符只能在异步方法中使用。考虑使用“异步”修饰符标记此方法并将其返回类型更改为“任务”。 感谢您,Abhishek,我的问题少了一个。 =)以上是关于如何让我的 json 查询等待手机的位置?的主要内容,如果未能解决你的问题,请参考以下文章