永远不会返回HTTP响应

时间:2016-05-10 10:58:14

标签: c# android xamarin httprequest

我正在使用Xamarin.Android构建应用程序!在给定纬度和经度时,使用Google Maps API确定我的地址。但是,我的应用程序无法提供HTTP响应。我没有收到任何运行时错误,VS调试器就像我的应用程序挂起一样。

1>我不知道这是否是Xamarin.Android的问题

2 - ; 正如我读到的那样,它可能是一个阻塞,异步代码的问题,但后来我为我的Windows应用程序使用相同的代码,它从来没有给我带来麻烦

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;

namespace App_Code
{
public class myLocationProxy
{
    public static async Task<RootObject_AutoLocationAddress> getmyLocation(string lat, string lng)
    {


        var http = new HttpClient();    
       /*CODE STOPS HERE*/var response = await http.GetAsync(String.Format("http://maps.google.com/maps/api/geocode/json?latlng={0},{1}&sensor=false", Uri.EscapeDataString(lat), Uri.EscapeDataString(lng)));         
        var result = await response.Content.ReadAsStringAsync();
        var serializer = new DataContractJsonSerializer(typeof(RootObject_AutoLocationAddress));

        var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));

        var data = (RootObject_AutoLocationAddress)serializer.ReadObject(ms);

        return data;
    }
}


[DataContract]
public class AddressComponent_AutoLocationAddress
{
   [DataMember]
    public string long_name { get; set; }
    [DataMember]
    public List<string> types { get; set; }
}
[DataContract]
public class Result_AutoLocationAddress
{
    [DataMember]
    public List<AddressComponent_AutoLocationAddress> address_components { get; set; }
    [DataMember]
    public string formatted_address { get; set; }

}
[DataContract]
public class RootObject_AutoLocationAddress
{
    [DataMember]
    public List<Result_AutoLocationAddress> results { get; set; }
    [DataMember]
    public string status { get; set; }
}
}

1 个答案:

答案 0 :(得分:0)

尝试下面添加TimeOut值的代码段。

public static async Task<RootObject_AutoLocationAddress> getmyLocation(string lat, string lng)
{
       var client = new HttpClient() 
       { 
         Timeout = TimeSpan.FromMilliseconds(10000) //10 second, This line might help you
       };

       var response = await client.GetAsync(String.Format("http://maps.google.com/maps/api/geocode/json?latlng={0},{1}&sensor=false", Uri.EscapeDataString(lat), Uri.EscapeDataString(lng)));         
        var result = await response.Content.ReadAsStringAsync();
        var serializer = new DataContractJsonSerializer(typeof(RootObject_AutoLocationAddress));

        var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));

        var data = (RootObject_AutoLocationAddress)serializer.ReadObject(ms);

        return data;
}

干杯!!