2012-03-01 18 views
5

Ho creato un'app per Windows Phone 7 con la funzione "Accedi con google". La libreria di Google non è compatibile con Windows Phone Runtime quindi scelgo RestSharp.Come utilizzare RestSharp per l'autenticazione di Google?

L'app ha ricevuto correttamente un codice di autenticazione da Google e il passaggio successivo è lo scambio del codice per un token di accesso e un token di aggiornamento. Qui ho riscontrato qualche 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? 

io non sono sicuro di come utilizzare il metodo client.ExecuteAsync<T> (o qualsiasi altro sarebbe utile) per ottenere la risposta da parte di Google. C'è qualche altro codice pre-richiesto per me per utilizzare tale metodo? Qualcuno può aiutarmi?

risposta

3

È necessario associare un elemento dell'interfaccia utente per visualizzare la risposta. Questo sembra essere l'essenza del problema che hai delineato.

Se si desidera visualizzare la risposta nell'applicazione, è necessario che un elemento dell'interfaccia utente sia associato a una struttura di dati interna.

Visualizzazione risposta

// in XAML, per esempio MainPage.xaml

<TextBox x:Name="myResponseTextBox"> 

// nelle corrispondenti MainPage.xaml.cs

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

    myResponseTextBox.text = response.Content; 

}); 

La casella di testo visualizzerà il risultato della richiamata al termine di.

+0

il mio problema è come se il callback non fosse invocato se altri codici sono stati eseguiti. Questa è una buona soluzione, grazie! – yifei

+0

Inoltre, il codice all'interno del azione deve essere avvolto in un dispatcher in modo che viene eseguito sul thread UI 'client.ExecuteAsync (richiesta, (risposta) => { Deployment.Current.Dispatcher.BeginInvoke (() = > { myResponseTextBox.text = response.Content; }); }); ' – Chewbarkla

1

prova:

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

Ciao Maka, il fatto è che ho bisogno di recuperare le informazioni da 'dataToBeParsed' e visualizzarle nella mia pagina dell'app. Qui non sono sicuro se 1) il 'dataToBeParsed' è stato ricevuto 2) poiché è eseguito async, come posso fare in modo che il mio programma attenda fino a quando questa riga di codice è stata eseguita? Se metto un punto di interruzione a 'var dataToBeParsed = response.Content;', il programma restituirà un errore prima che questo punto venga raggiunto poiché la riga di codice successiva nella funzione chiamante viene eseguita inaspettatamente. – yifei

+0

qual è l'errore? –

Problemi correlati