2012-03-01 20 views
5

He creado una aplicación para Windows Phone 7 con la función "iniciar sesión con google". La biblioteca de Google no es compatible con el tiempo de ejecución de Windows Phone, así que elijo RestSharp.Cómo utilizar RestSharp para la autenticación de Google?

La aplicación ha recibido correctamente un código de autenticación de Google, y el siguiente paso es intercambiar el código de un token de acceso y un token de actualización. Aquí encontré un problema.

var request = new RestRequest(this.TokenEndPoint, Method.POST); 
request.AddParameter("code", code); 
request.AddParameter("client_id", this.ClientId); 
request.AddParameter("client_secret", this.Secret); 
request.AddParameter("redirect_uri", "http://localhost"); 
request.AddParameter("grant_type", "authorization_code"); 
client.ExecuteAsync<???>(request, (response) => 
      { 
       var passIn = response; 
      }); // how to use this method? 

no estoy seguro de cómo utilizar el método client.ExecuteAsync<T> (o cualquier otro sería útil) para obtener la respuesta de Google. ¿Hay algún otro código solicitado previamente para que use dicho método? Alguien puede ayudarme?

Respuesta

3

que necesita vincular un elemento de interfaz de usuario para mostrar la respuesta. Esa parece ser la esencia del problema que ha delineado.

Si desea mostrar la respuesta en su aplicación, debe tener un elemento de IU vinculado a una estructura de datos interna.

Viendo la respuesta

// en XAML, por ejemplo MainPage.xaml

<TextBox x:Name="myResponseTextBox"> 

// en los correspondientes MainPage.xaml.cs

client.ExecuteAsync(request, (response) => 
{ 

    myResponseTextBox.text = response.Content; 

}); 

el cuadro de texto mostrará el resultado de la devolución de llamada cuando finaliza.

+0

mi problema es como que la devolución de llamada no se invocará si se están ejecutando algunos otros códigos. Esta es una buena solución, ¡gracias! – yifei

+0

También, el código dentro de la acción debe ser envuelto en un despachador por lo que es ejecutado en el subproceso de interfaz de usuario 'client.ExecuteAsync (request, (respuesta) => { Deployment.Current.Dispatcher.BeginInvoke (() = > { myResponseTextBox.text = response.Content; }); }); ' – Chewbarkla

1

intento:

client.ExecuteAsync(request, (response) => 
{ 
    var dataToBeParsed = response.Content; 
}); 
+0

Hola Maka, el hecho es que necesito recuperar información de 'dataToBeParsed' y mostrarla en la página de mi aplicación. Aquí no estoy seguro de si 1) el 'dataToBeParsed' ha sido recibido 2) ya que se ejecuta de forma sincronizada, ¿cómo puedo hacer que mi programa espere hasta que se haya ejecutado esta línea de código? Si pongo un punto de corte en 'var dataToBeParsed = response.Content;', el programa devolverá el error antes de que se llegue a este punto, ya que la siguiente línea de código en la función de llamada se ejecuta inesperadamente. – yifei

+0

¿cuál es el error? –

Cuestiones relacionadas