2016-12-08 38 views
0

我真的是新的Xamarin開發,我只是試圖Xamarin.Forms開發Android共享代碼的iOS應用程序&,我在這裏要做的是使用Plugin.RestClient NuGet包從API獲取數據。Xamarin HttpClient.GetStringAsync不工作Xamarin.Droid

這是我的MainViewModel。

public MainViewModel(){ 
    InitializeDataAsync(); 
} 

public async Task InitializeDataAsync(){ 
    var employeeServices = new EmployeeServices(); 
    EmployeesList = await employeeServices.getEmployeesAsync(); 
} 

這是我的服務

public async Task<List<Employee>> getEmployeesAsync(){ 
    RestClient<Employee> restClient = new RestClient<Employee>(); 
    var employeeList = await restClient.GetAsync("http://localhost:3000/employee"); 
    return employeeList; 
} 

這是我的RESTClient實現

public async Task<List<T>> GetAsync(string WebServiceUrl){ 
    var httpClient = new HttpClient(); 
    var json = await httpClient.GetStringAsync(WebServiceUrl); 

    Debug.WriteLine(WebServiceUrl); 
    Debug.WriteLine(json); 

    var taskModels = JsonConvert.DeserializeObject<List<T>>(json); 
    return taskModels; 
} 

的代碼工作正常,在我的iPhone模擬器。我可以看到我的調試url和json響應。但在我的Android模擬器上,列表中沒有任何內容。我甚至找不到我的調試url和json響應,我已經檢查了我的應用程序輸出和我的設備日誌(我使用Xamarin Studio for Mac btw)。

我也已經在Android Manifest上添加了互聯網權限。 我該怎麼辦?

回答

1

您只能在本地機器上訪問localhost。您需要將localhost更改爲您的api所在機器的IP地址。

所以對於

http://localhost:3000/employee 

API的終點應該是這樣的

http://192.168.0.5:3000/employee 
0

如果你得到一個超時錯誤,那麼這可能是因爲「localhost」改成了Android OS指電話本身,這可能不是你沒有運行網絡服務器的地方。在使用Android模擬器測試到達主機操作系統時,可以使用一些特殊的IP地址:

  1. Google模擬器允許您從10.0.2.2到達主機操作系統。
  2. Microsoft Android模擬器允許您從169.254.80.80到達主機操作系統。

您可以嘗試根據您使用的模擬器的類型更改您的URL。或者,您可以插入您的工作站IP地址,但這不太理想,因爲它可以更改。

如果這不允許您訪問服務器,那麼您可以考慮查看任何防火牆以查看您的流量是否被阻止。