2017-03-22 68 views
0

我正在創建一個Xamarin應用程序,我必須將主數據填充到移動版的sqlite數據庫中。如何編寫通用代碼以向Rest服務進行異步調用

我是新來的OOPS和Xamarin

我有多個請求作出從的WebAPI獲取數據。我需要的請求是超過50個電話來獲取信息。

現在,我需要編寫異步通用代碼來實現這一點。

例如:我有填充數據EmployeeMaster,公司主等。

我的代碼一般應該能夠確定調用哪個URL和對象必須歸還。我的正常的代碼如下

唯一變化的數據按如下RestUrl和的TodoItem

public async Task<List<TodoItem>> RefreshDataAsync() 
    { 
     Items = new List<TodoItem>(); 

     RestUrl = http://developer.xamarin.com:8081/api/todoitems{0} 
     var uri = new Uri(string.Format(Constants.RestUrl, string.Empty)); 

     try 
     { 
      var response = await client.GetAsync(uri); 
      if (response.IsSuccessStatusCode) 
      { 
       var content = await response.Content.ReadAsStringAsync(); 
       Items = JsonConvert.DeserializeObject<List<TodoItem>>(content); 
      } 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(@"    ERROR {0}", ex.Message); 
     } 

     return Items; 
    } 

回答

0

你應該看看到泛型。 像這樣的東西可能會幫助你。

public async Task<List<T>> RefreshDataAsync(string url) 
{ 
    var items = new List<T>(); 

    try 
    { 
     var response = await client.GetAsync(url); 
     if (response.IsSuccessStatusCode) 
     { 
      var content = await response.Content.ReadAsStringAsync(); 
      items = JsonConvert.DeserializeObject<List<T>>(content); 
     } 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(@"    ERROR {0}", ex.Message); 
    } 

    return items; 
} 

我會刪除列表類型,只使用T,這樣該方法就能夠加載列表和單個項目。

public async Task<T> RefreshDataAsync(string url) 
{ 
    try 
    { 
     var response = await client.GetAsync(url); 
     if (response.IsSuccessStatusCode) 
     { 
      var content = await response.Content.ReadAsStringAsync(); 
      return JsonConvert.DeserializeObject<T>(content); 
     } 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(@"    ERROR {0}", ex.Message); 
    } 

    return new T; 
} 
+0

謝謝你tequila slammer。 –

+0

如果您可以將我的解決方案標記爲回答您的問題,那將非常棒。 :-) –

+0

我投了我的票。我可以在這裏明確標記爲答案嗎? –