2016-12-08 4 views
0

Ich bin wirklich neu in Xamarin Entwicklung, und ich habe gerade versucht Xamarin.Forms Android & iOS App mit gemeinsamem Code zu entwickeln, und was ich hier zu tun versuche, ist zu Daten mit dem Plugin.RestClient NuGet Paket aus der API holen.Xamarin HttpClient.GetStringAsync funktioniert nicht auf Xamarin.Droid

Hier ist mein MainViewModel.

public MainViewModel(){ 
    InitializeDataAsync(); 
} 

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

Und hier ist meine Dienstleistungen

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

Und das ist mein 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; 
} 

Der Code funktioniert auf meinem iPhone Emulator in Ordnung. Ich kann meinen Debug für die URL- und JSON-Antwort sehen. Aber auf meinem Android Emulator ist nichts auf der Liste. Ich kann nicht einmal meinen Debug für URL und JSON Antwort finden, ich habe bereits meine Application Output und meine Device Log (ich habe Xamarin Studio für Mac btw) überprüft.

Ich füge auch bereits Internet-Erlaubnis auf meinem Android Manifest hinzu. Was soll ich tun?

Antwort

1

Sie können nur auf Ihrem lokalen Computer auf localhost zugreifen. Sie müssen localhost an die IP-Adresse des Computers ändern, auf dem Ihre API gehostet wird.

So ist der api Endpunkt für

http://localhost:3000/employee 

sollte wie etwas sein

http://192.168.0.5:3000/employee 
0

Wenn Sie eine Zeitüberschreitung Fehler bekommen, dann ist es wahrscheinlich, weil „localhost“ auf das Android OS bedeutet, dass die Telefon selbst, das ist wahrscheinlich nicht, wo Sie den Webserver nicht ausführen. Es gibt einige spezielle IP-Adressen, die Sie beim Testen mit Android-Emulatoren verwenden können, um das Host-Betriebssystem zu erreichen:

  • Mit den Google-Emulatoren können Sie das Host-Betriebssystem von 10.0.2.2 aus erreichen.
  • Der Microsoft Android-Emulator ermöglicht es Ihnen, das Host-Betriebssystem von 169.254.80.80 zu erreichen.
  • Sie könnten versuchen, Ihre URL basierend auf dem Typ des verwendeten Emulators zu ändern. Alternativ können Sie stattdessen die IP-Adresse Ihrer Workstation einpflegen, dies ist jedoch weniger wünschenswert, da sie sich ändern kann.

    Wenn dies nicht zulässt, dass Sie den Server erreichen, sollten Sie eventuell eine Firewall untersuchen, um zu sehen, ob Ihr Datenverkehr blockiert wird.

    Verwandte Themen