Android, Xamarin Formularios PCL, PortableRest PCL y Async Web Api Call

Estoy intentando utilizar PortableRest para hacer una llamada asíncrona a un Web API 2.2 Servicio de descanso de Xamarin Forms.

Creo que tengo algún tipo de problema de deadlock / synchronisationcontext pero no puedo resolverlo (newbie a async etc).

Alguien puede ayudarme porfavor?

Mi método de prueba del controlador (eliminado cualquier llamada a la base de datos)

public IEnumerable<ContentModel> GetTestRest() { return new List<ContentModel> { new ContentModel() {Categoryid = 1, Title = "Title"}}; } 

Mis pases de prueba de unidad –

 [TestMethod] public async Task TestRest() { MyNewsApiClient MyNewsApiClient = new MyNewsApiClient(); var models = await MyNewsApiClient.TestRest(); int count = models.Count; Assert.AreEqual(1, count); } 

Mi método de proxy portátil (PCL)

 public async Task<List<ContentModel>> TestRest() { var request = new RestRequest(); request.Resource = "Content/GetTestRest"; return await ExecuteAsync<List<ContentModel>>(request); } 

Formularios Xamarin ContentPage (PCL) –

 public partial class NewsType1CP : ContentPage { public NewsType1CP () { InitializeComponent (); } protected override void OnAppearing () { LoadData (); // this is a sync call of an async method, not sure how else to approach, make OnAppearing async? } public async Task LoadData () { Debug.WriteLine ("LoadData"); HeaderLabel.Text = "Load Data!"; MyNewsApiClient api = new MyNewsApiClient (); var cm = await api.TestRest (); // this will work on its own, control returns to this method - await api.GetDelay (); HeaderLabel.Text = "After! - "; NewsListView.ItemsSource = cm; } } 

La espera de api.TestRest () nunca resulta en HeaderLabel.After o ListView que se está estableciendo.

Si acabo de agregar una prueba Proxy Method GetDelay () que no llama a PortableRest a través de return esperamos ExecuteAsync> (request);

 public async Task<bool> GetDelay () { await Task.Delay (1000); return true; } 

Entonces todo "trabaja".

Gracias por su ayuda, voy a descargar el código fuente para PortableRest si es necesario (utilizando Nuget dll en la actualidad), simplemente no estaba seguro si falta algo básico en este nivel superior.

One Solution collect form web for “Android, Xamarin Formularios PCL, PortableRest PCL y Async Web Api Call”

Bien, esto finalmente no tiene nada que ver con Async (o cualquier problema con PortableRest), pero pensé que compartiría en caso de que pueda ayudar a otros.

Finalmente, poner un bloque try (obvio paso siguiente ahora!) Y capturó esta excepción –

Método no encontrado: 'System.Net.Http.HttpClientHandler.set_AutomaticDecompression'.

Así que, mirando esto –

http://davidburela.wordpress.com/2013/07/12/error-when-using-http-portable-class-library-compression/

PortableRest ya estaba en mi PCL de formularios, pero necesitaba agregar las bibliotecas de clientes Http de Microsoft Nuget a mi aplicación de Android.

Entonces conseguí –

Error: ConnectFailure (La dirección solicitada no es válida en este contexto)

Pensé que puede ser algo que ver con los permisos de Android, pero no fue en este caso (aunque ahora me doy cuenta de que tengo que añadir el permiso de Internet de todos modos para futuras llamadas).

Debido a que estoy ejecutando mi aplicación en una VM (de GenyMotion / Virtual Box), la aplicación para Android no puede acceder a LocalHost (donde reside mi Api Web)

Así pues, de esto –

http://bbowden.tumblr.com/post/58650831283/accessing-a-localhost-server-from-the-genymotion

Puedo confirmar que el uso de la dirección mostrada en VirtualBox> Archivo> Preferencias> Red> VirtualBox Host-Only Network Adapter> Modify hace el trabajo maravillosamente.

Gracias por tu ayuda.

  • Cómo transmitir datos de MediaCodec a AudioTrack con Xamarin para Android
  • NotSupportedException No se pudo activar JNI Handle - MvvmCross
  • Xamarin Android - Hacer una petición de descanso con un parámetro complejo (objeto) lanza excepción, en .NET funciona bien (Usando fábrica de canales)
  • Cómo configurar MultiSelectListPreference defaultValue en el código
  • Agregar controles de xamarin android a la caja de herramientas de Visual Studio
  • Strike html tag no renderizado en EditText con TextFormatted
  • Colores de Xamarin que causan errores de compilación
  • No se puede encontrar puntos seq para el método '(wrapper administrado a nativo) System.Diagnostics.Debugger: Mono_UnhandledException_internal (System.Exception)'
  • Cómo arreglar los errores de compilación de Xamarin.Android con proguard habilitado?
  • Uso de FusedLocationApi con Xamarin 3
  • Escribir plugins Unity3D multiplataforma con Xamarin
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.