Xamarin HttpClient.GetStringAsync不能在Xamarin.Droid上运行

时间:2016-12-08 12:57:31

标签: c# xamarin xamarin.ios xamarin.android xamarin.forms

我在Xamarin开发方面真的很新,我刚试过Xamarin.Forms开发Android&带有共享代码的iOS应用程序,以及我在这里尝试做的是使用Plugin.RestClient NuGet包从API获取数据。

这是我的MainViewModel。

sed -e 's/\(something\)/\\\\\1/g' file

这是我的服务

public MainViewModel(){
    InitializeDataAsync();
}

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

这是我的RestClient

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

我的iPhone模拟器上的代码运行正常。我可以看到我的调试url和json响应。但是在我的Android模拟器上,列表中没有任何内容。我甚至无法找到我的调试url和json响应,我已经检查了我的应用程序输出和我的设备日志(我使用Xamarin Studio for Mac btw)。

我还在Android Manifest上添加了互联网权限。 我该怎么办?

2 个答案:

答案 0 :(得分:1)

您只能访问本地计算机上的localhost。您需要将localhost更改为托管api的计算机的IP地址。

所以

的api端点
http://localhost:3000/employee

应该是

http://192.168.0.5:3000/employee

答案 1 :(得分:0)

如果你得到一个超时错误,那么可能是因为Android操作系统的“localhost”意味着手机本身,这可能不是你没有运行网络服务器的地方。在使用Android模拟器测试以访问主机操作系统时,您可以使用一些特殊的IP地址:

  1. Google模拟器允许您从10.0.2.2到达主机操作系统。
  2. Microsoft Android模拟器允许您从169.254.80.80到达主机操作系统。
  3. 您可以尝试根据您使用的模拟器类型更改URL。或者,您可以插入工作站的IP地址,但这不太可取,因为它可以更改。

    如果这不允许您访问服务器,那么您可以考虑查看任何防火墙以查看您的流量是否被阻止。