2016-08-03 18 views
0

Guten Tag alle. Ich erstelle eine einfache Xamarin.Forms Portable-Anwendung in meinem Visual Studio 2015.Xamarin.Forms Verbinden mit Web-Services

Ich möchte meine mobile Anwendung mit der SQL-Datenbank verbinden, die ich in meinem VS2015 habe und eine Liste der Kunden, die auf meinem Handy angezeigt werden soll Telefon.

Ich habe ein Xamarin Portable-Projekt und ein WebForms-Projekt erstellt, das meine Webdienste und die Datenbank verarbeiten wird.

In meinem WebForms-Projekt habe ich einen Controller erstellt, der die Liste der Kunden zurückgeben soll. Dies hat eine Web-Service-URL api/Customer, die ich verwendet habe, um den RestClient in meinem Xamarin Portable zu verbinden. Ich habe auch CustomerViewModel, das die Daten in meiner Anwendung darstellen sollte.

In meinem Xamarin Portable-Projekt habe ich eine ClientList.xaml, die die Liste anzeigen sollte, die aus meiner Datenbank stammt. Ich habe auch eine CustomerVM, die mit Services und meinem RestClient verbunden ist. Mein RestClient hat die WEBSERVICE-URL verwendet, um die Liste der Kunden aus meinem WebForms-Projekt abzurufen.

Aufgrund der oben genannten Schritte konnte ich die Daten auf meinem Mobiltelefon noch immer nicht anzeigen. Was denkst du ist der Grund dafür? Danke für Ihre Hilfe.

Hier einige meiner Codes sind:

RestClient.cs

public class RestClient_Customer<T> 
{ 


    private const string WebServiceUrl = "http://localhost:50857/api/Customer/"; 

    public async Task<List<T>> GetCustomerAsync() 
    { 

     var httpClient = new HttpClient(); 
     httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     var json = await httpClient.GetStringAsync(WebServiceUrl); 

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

     return taskModels; 
    } 
} 

CustomerServices.cs

using Plugin.RestClient; 
using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Linq; 
using System.Net.Http; 
using System.Text; 
using System.Threading.Tasks; 
using XamarinFormsDemo.Models; 

namespace XamarinFormsDemo.Services 
{ 
    public class CustomerServices 
    { 

    public async Task<List<Customer>> GetCustomerAsync() 
    { 
     RestClient_Customer<Customer> restClient = new RestClient_Customer<Customer>(); 

     var customerList = await restClient.GetCustomerAsync(); //yung getasync ay pantawag as restclient 

     return customerList; 
     } 
    } 
} 

CustomerVM.cs

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.ComponentModel; 
using System.Diagnostics; 
using System.Linq; 
using System.Net.Http; 
using System.Runtime.CompilerServices; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Input; 
using Xamarin.Forms; 
using XamarinFormsDemo.Models; 
using XamarinFormsDemo.Services; 
using XamarinFormsDemo.Views; 

namespace XamarinFormsDemo.ViewModels 
{ 
    public class CustomerVM : INotifyPropertyChanged 
    { 


     private List<Customer> _customerList; // keep all customers 
     private List<Customer> _searchedCustomerList; // keep a copy for searching 
     private Customer _selectedCustomer = new Customer(); 

     private string _keyword = ""; 
     public string Keyword 
     { 
      get 
      { 
       return _keyword; 
      } 
      set 
      { 
       this._keyword = value; 

       // while keyword changed we filter Employees 
       //Filter(); 
      } 
     } 



     private void Filter() 
     { 
      if (string.IsNullOrWhiteSpace(_keyword)) 
      { 
       CustomerList = _searchedCustomerList; 

      } 
      else 
      { 
       // var lowerKeyword = _keyword.ToLower(); 
       CustomerList = _searchedCustomerList.Where(r => r.CUSTOMER_NAME.ToLower().Contains(_keyword.ToLower())).ToList(); 
       // EmployeesList = _searchedEmployeesList.Where(r => r.EMPLOYEE_NAME.Contains(_keyword)).ToList(); 


      } 
     } 


     public List<Customer> CustomerList 
     { 
      get 
      { 
       return _customerList; 
      } 
      set 
      { 
       _customerList = value; 
       OnPropertyChanged(); 
      } 
     } 



     public CustomerVM() 
     { 
      InitializeDataAsync(); 

     } 

     private async Task InitializeDataAsync() 
     { 
      var customerServices = new CustomerServices(); 
      _searchedCustomerList = await customerServices.GetCustomerAsync(); 
      CustomerList = await customerServices.GetCustomerAsync(); 

     } 




     public event PropertyChangedEventHandler PropertyChanged; 

     protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
     { 
      var handler = PropertyChanged; 
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 

    } 
} 

Antwort

1

ich glaube, das Problem ist, in deinen Diensten hoffe dies wird Ihnen helfen,

 public interface ICustomer 
     { 
      Task<string> GetCustomers(); 
     } 

     public class CustomerService : ICustomer 
     { 

     public async Task<string> GetCustomers() 
     { 
      var client = new HttpClient(); 
      var response = await client.GetAsync(string.Format("http://mysite/api/Customer")); 
      var responseString = await response.Content.ReadAsStringAsync(); 
      return responseString; 
     } 

     } 

Nennen Sie es überall Sie

 var _custList = new GetCustomers(); 

     var returnJson = await _custList.GetCustomers(); 

Hinweis wie die Rückkehr JSON-String-Format oder XML-Format auf Ihrem REST API abhängig, so dass Sie diese zuerst analysieren müssen, bevor Sie bekommen können den Wert und zeigen Sie es an ListView

+0

Wo sollte ich diesen Sir setzen? In meinem ViewModel oder in meinen Services? –

+0

Grundsätzlich ist es immer noch in Ihren Diensten, da dies Teil Ihrer Services ist, die Ihre Parsedaten in Ihr Model –

+0

füllen, also bedeutet es, dass ich den RestClient nicht mehr brauche, weil ich dort die Webserviceurl erhalte? –

0

Versuchen Sie es in UWP ausgeführt. Wenn es in UWP funktioniert, dann müssen Sie einen Blick auf Xamarin HttpClient.GetStringAsync not working on Xamarin.Droid

Ich hatte das gleiche Problem, aber wenn ich es in UWP versuchte es hat gut funktioniert. Ich suche immer noch nach der Lösung, xamarin.android mit Gerät zu betreiben.