2016-04-07 7 views
1

私がやっているAPIからデータを取得するためにrestsharpを使用していますが、Xamarin(Android、iOS)で使用される "ApiInterface" 、Windows ...)を呼び出してAPIを呼び出します。RestSharp onレスポンスコールバックを呼び出す方法が分かりません

このクラスはRestClientと関数を持ち、シングルトンとしてコードのどの部分からでも呼び出されます。

たとえば、私はMainActivity.csのようなものを持っています。 (私のgetData関数を呼び出すと、私が受け取ったデータで物事をする)。

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); 
    }); 
}; 

しかし、APIInterfaceでは、Cookieのような共通データを取得したいと考えています。

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(); 
    }); 
} 

私の問題は私の中でのgetData OnDoneを実行する方法および/またはのgetData関数を呼び出すためにどのように - 私は確かではありません。

ありがとうございます!

答えて

2

私はコールバックを使用してから移動し、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

こんにちはアンドレ、私はあなたのコードを試していない、私は非同期/待っているC#の機能を使用して新しいのは何ですか? – Chopi

+0

あなたは、xamarinとそのナビゲーション・フローのすべてのインターフェースを変更したほうがよかったです。 – Chopi

1

ActionパラメータonDoneIRestReponse型のパラメータを取ります。

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

の非同期/待つの機能を利用するだろうありがとうlenkan! 私はそれに立ち往生しました! :) – Chopi

関連する問題