2016-08-04 20 views
0

Guten Tag alle. Ich erstelle Xamarin.Forms Portable Anwendung in meinem Visual Studio 2015.Wie WebServiceURL in Xamarin.Forms-Projekt verbinden?

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

In meiner Lösung habe ich ein Xamarin Portable-Projekt und ein WebForms-Projekt erstellt, das meine Webdienste und die Datenbank verarbeiten wird.

In meinem WebForms-Projekt konnte ich mit LINQ-Ausdruck Daten aus der Datenbank abrufen. Ich überprüfte dies sogar mit WEB API und ich konnte wirklich Daten abrufen. Wie das Bild unten:

enter image description here

Was ich tun möchte, ist, diese Daten zu meinem Xamarin Tragbarer Projekt zugreifen RestClient verwenden. Ich habe die WebServiceUrl meines WebForms-Projekts verwendet, um die darin enthaltenen Daten abzurufen. Aber immer, wenn ich einen Breakpoint verwendet, um zu testen, ob es die Daten, abgerufen hat, gibt es keinen Wert zurück.

Bedeutung Ich werde nicht wirklich die LISTE DER KUNDEN anzeigen können.

Was denken Sie ist der Grund dafür?

Hier sind einige meiner Codes:

1.) WebForms

CustomerController.cs

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.Web.Http.Description; 
using WebFormsDemo; 
using WebFormsDemo.ViewModel; 

namespace WebFormsDemo.Controllers 
{ 
    public class CustomerController : ApiController 
     { 
    private EBMSEntities db = new EBMSEntities(); 

    // GET: api/Customer 
    public IQueryable<CustomerViewModel> GetCustomerViewModels() 

    { 
     var displaycustomerInfo = from cust in db.CUSTOMERs 
            select new CustomerViewModel 
            { 
             Id = cust.CUSTOMER_ID, 
             CUSTOMER_CODE = cust.CUSTOMER_CODE, 
             CUSTOMER_NAME = cust.CUSTOMER_NAME, 
             CUSTOMER_MOBILE_NUMBER = cust.CUSTOMER_MOBILE_NUMBER, 
             CUSTOMER_EMAIL_ADDRESS = cust.CUSTOMER_EMAIL_ADDRESS, 
             CUSTOMER_CONTACT = cust.CUSTOMER_EMAIL_ADDRESS + "," + " " + cust.CUSTOMER_MOBILE_NUMBER 
            }; 




     return displaycustomerInfo; 
     } 

    } 
} 

2.) XamarinForms

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(); 

     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)); 
    } 

    } 
} 

HINWEIS: Bitte nehmen Sie einen genaueren Blick auf mein RestClient, ob ich es richtig oder nicht mache. Danke vielmals.

+0

es Problem mit dem localhost sein könnte.Ich vermute, dass Ihr Telefon oder Emulator die localhost Adresse nicht finden kann. – batmaci

+0

@batmaci Aber ich habe es in 2 weiteren Telefonen Sir versucht. Trotzdem bekomme ich das Gleiche. Sind meine Codes korrekt? –

Antwort

1

Ich denke nicht, dass es das Problem mit Emulator oder Telefon ist. Sie können nicht nur über Ihr Android-Gerät eine Verbindung zu Localhost herstellen. Sie müssen die vom Router bereitgestellte externe IP-Adresse verwenden, wenn sie mit Wireless verbunden ist. Bitte sehen Sie diese 2 Themen

How can I access my localhost from my Android device?

How to connect to my http://localhost web server from Android Emulator in Eclipse

+0

, aber ich verbinde Sir über WebService? Ich erhalte die WebServiceURL meines Webformular-Projekts wie folgt: "http: // localhost: 50857/api/Customer /"; und greifen Sie auf RestClient zu. Muss ich noch etwas ändern, um es zu tun? –

+0

@JayceeEvangelista Ihr Webservice muss außerhalb Ihres lokalen PCs erreichbar sein. Können Sie Ihren Webservice von einem anderen Computer aus verbinden? Wenn nicht, ist es dasselbe, das Android-Gerät auch nicht verbinden kann. – batmaci

+0

Woher weiß ich, ob ich von einem anderen PC auf den WebService zugreifen kann? Sollte ich nur darauf zugreifen? http: // localhost: 50857/api/Kunde/ –