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));
}
}
}
Wo sollte ich diesen Sir setzen? In meinem ViewModel oder in meinen Services? –
Grundsätzlich ist es immer noch in Ihren Diensten, da dies Teil Ihrer Services ist, die Ihre Parsedaten in Ihr Model –
füllen, also bedeutet es, dass ich den RestClient nicht mehr brauche, weil ich dort die Webserviceurl erhalte? –