如何让我的 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 查询等待手机的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的程序等待 Firebase 响应 IOS

如何让我的异步客户端调用套接字服务器并等待响应

(相机校准)如何让我的循环读取图像只等待 10 秒,如果没有任何东西移动到下一张图像?

如何让这个函数等待 JSON 数据准备好

让我的php等待我的python脚本结束[重复]

如何成功等待函数结束?