2015-03-29 4 views
4

Я столкнулся с исключением при попытке отправить HTTP-запрос на Android. На WinPhone он работает. Это мой код:Xamarin.Forms - необработанное исключение в HttpClient SendAsync

 string resp = null; 

     using (var client = new HttpClient()) 
     { 
      var httpRequest = new HttpRequestMessage(new HttpMethod("POST"), _uri); 
      //client.BaseAddress = new Uri(_uri); 
      try 
      { 
       client.Timeout = TimeSpan.FromSeconds(30); 
       var _cancelTokenSource = new CancellationTokenSource(); 
       var _cancelToken = _cancelTokenSource.Token; 
       var response = await client.SendAsync(httpRequest, _cancelToken); 
       resp = await response.Content.ReadAsStringAsync(); 
       //var result = await client.PostAsync("", new StringContent(json.ToString(), Encoding.UTF8, "application/json")); 
       //resp = await result.Content.ReadAsStringAsync(); 
      } 
      catch (Exception e) 
      { 
       Debug.WriteLine("HTTP ERROR: " + e.Message); 
       throw e; 
      } 
     } 

О свойствах> Android Manifest Я проверил INTERNET разрешения. Кроме того, он проходит через необработанное исключение, и я не вижу, что произошло. Он не показал точно ошибку, ни arriver на моем методе для необработанного исключения, что я поставил так:

AndroidEnvironment.UnhandledExceptionRaiser += AppDroid_UnhandledExceptionHandler; 

Любая идея о том, что неправильно или любая идея о том, чтобы увидеть сообщение об ошибке? В WinPhone он приходит на мой метод, когда возникает какая-то непредвиденная ошибка, тогда его легко исправить.

Спасибо!

+0

Такая же проблема, вы нашли решение? – glautrou

ответ

3

Известная ошибка на Android HttpClient. Смотрите это: http://forums.xamarin.com/discussion/36470/httpclient-postasync-deadlock-system-net-sockets-connect-internal

Изменить это:

using (var client = new HttpClient()) 
     { 
      var httpRequest = new HttpRequestMessage(new HttpMethod("POST"), _uri); 
      //client.BaseAddress = new Uri(_uri); 
      try 
      { 
       client.Timeout = TimeSpan.FromSeconds(30); 
       var _cancelTokenSource = new CancellationTokenSource(); 
       var _cancelToken = _cancelTokenSource.Token; 
       var response = await client.SendAsync(httpRequest, _cancelToken).ConfigureAwait(false); 
       resp = await response.Content.ReadAsStringAsync().ConfigureAwait(false); 
      } 
      catch (Exception e) 
      { 
       Debug.WriteLine("HTTP ERROR: " + e.Message); 
       throw e; 
      } 
     } 

Вы также можете попробовать ModernHttpClient. Это прямая замена.

Смежные вопросы