2016-04-07 11 views
1

Yaptığım bir API'den veri almak için restsharp kullanıyorum, Xamarin'de kullanılacak bir sınıf yapmak istiyorum (Android, iOS) , Windows ...) API'ye çağrı yapmak.RestSharp on Response Geri arama nasıl yapılır bilemiyorum

Bu sınıf, RestClient ve kodun herhangi bir bölümünden çağrılacak olan bir singleton'dur. Örneğin, örneğin bir MainActivity.cs gibi bir şeye sahip olacağım. (GetData işlevimi çağırmak ve aldığım verilerle ilgili şeyler yapmak).

Button buttonListaIntereses = FindViewById<Button> (Resource.Id.myButton); 

buttonListaIntereses.Click += delegate { 
    ApiInterface.Instance.getData(response2=> 
    { 
     Intent displayMessage = new Intent(this, typeof(DisplayMessage)); 
     //Put info in Extra for the new screen. 
     displayMessage.PutExtra("content", response2.Content); 
     StartActivity(displayMessage); 
    }); 
}; 

Ancak, APIInterface'de çerezler gibi genel veriler almak istiyorum.

public async void getData(Action <IRestResponse> onDone) 
{   
    RestRequest request = new RestRequest("getData", Method.GET); 

    //Execute ASYNC the rest request 
    m_Client.ExecuteAsync (request, response => 
    { 
     //Do my stuff with headers. 
     string lCookie = response.Headers.ToList().Find(x => x.Name == "Cookie").Value.ToString(); 
     //Execute the OnDone 
     onDone(); 
    }); 
} 

Sorunum Emin değilim nasıl getData benim OnDone yürütmek ve/veya nasıl getData işlevi çağırmak için olmasıdır.

Teşekkürler!

cevap

2

Ben geri aramalar kullanarak uzaklaşmak ve C#

buttonListaIntereses.Click += async delegate { 
    var response = await ApiInterface.Instance.getData(); 
    LaunchResponseActivity(response); 
}; 

public void LaunchResponseActivity(IRestResponse response) 
{ 
    Intent displayMessage = new Intent(this, typeof(DisplayMessage)); 
    //Put info in Extra for the new screen. 
    displayMessage.PutExtra("content", response.Content); 
    StartActivity(displayMessage); 
} 

public async Task<IRestResponse> getData() 
{   
    RestRequest request = new RestRequest("getData", Method.GET); 

    var cancellationTokenSource = new CancellationTokenSource(); 

    var restResponse = await client.ExecuteTaskAsync(request, cancellationTokenSource.Token); 

    //Do my stuff with headers. 
    string lCookie = restResponse.Headers.ToList().Find(x => x.Name == "Cookie").Value.ToString(); 

    return restResponse; 
} 
+0

Merhaba Andrés, kodunuzu denemedim, async/await C# özelliklerini kullanarak yeni oldum avantajları nelerdir? – Chopi

+0

Sen xamarin ve onun navigasyon akışı için tüm arayüzü daha iyi değiştiriyordu. – Chopi

1

Eylem parametresi onDoneIRestReponse tip bir parametre alır:

public async void getData(Action<IRestResponse> onDone) 
{   
    RestRequest request = new RestRequest("getData", Method.GET); 

    //Execute ASYNC the rest request 
    m_Client.ExecuteAsync (request, response => 
    { 
     //Do my stuff with headers. 
     string lCookie = response.Headers.ToList().Find(x => x.Name == "Cookie").Value.ToString(); 

     // Execute the onDone action with the received response 
     onDone(response); 
    }); 
} 
+0

arasında zaman uyumsuz/bekliyoruz özelliklerinden yararlanmak istiyorum Teşekkürler lenkan! Bununla takıldım! :) – Chopi