【问题标题】:How to get data from Web API to Xamarin forms Picker?如何从 Web API 获取数据到 Xamarin 表单选择器?
【发布时间】:2020-09-08 20:26:58
【问题描述】:

我正在开发一个 Xamarin 应用程序,我想使用来自具有服务器数据库的 Web API 的数据加载一个选取器。我试着用谷歌搜索,但大多数文章都没有显示使用 Get async Method、Model 类和 ViewModel 的源“服务类”的内容。如果有人能帮我举个例子,我将不胜感激。

这是我在 ASP.NET Web API 中的控制器

// GET: api/TipoUsers
public IQueryable<TipoUser> GetTipoUsers()
{
    return db.TipoUsers;
}

模型类

public class TipoUsuario
{
    public int IdTipoUsuario { get; set; }
    public string Nome { get; set; }
}

ViewModel 类

public class UsuarioViewModel
{
    public ObservableCollection<TipoUsuario> tipos { get; set; }

    public UsuarioViewModel() {    
        Task<List<TipoUsuario>> task = ApiService.ObterTipoUsuarios();

        tipos = new ObservableCollection<TipoUsuario>(task.Result);    
    }
}

Xaml 页面

<Picker Title="Selecione o Tipo de Usuario"
     ItemsSource="{Binding tipos}"
     ItemDisplayBinding="{Binding Nome}"/>

Xaml.cs

{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class UsuarioPage : ContentPage
    {
        public UsuarioPage()
        {
            InitializeComponent();
            BindingContext = new UsuarioViewModel();
        }
    }
}

服务类

public class ApiService
{
    public const string Url = "http://thisismysite:44342/";
    public static async Task<List<TipoUsuario>> GetTipoUsers()
    {
        try
        {
            HttpClient client = new HttpClient();
            string url = Url + "/api/TipoUsers";
            string response = await client.GetStringAsync(url);
            List<TipoUsuario> tipos = JsonConvert.DeserializeObject<List<TipoUsuario>>(response);
            return tipos;
        }
        catch (Exception)
        {

            throw;
        }
    }
}

当我调试应用程序时,它只是不加载屏幕。

【问题讨论】:

  • 这已被广泛记录。 Xamarin 提供了三个带有演练的完整示例 - docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/…
  • @DaleK 请帮我举个例子,我是新手..
  • 您没有告诉我们任何有关您的 API 的有用信息 - 它的签名是什么,是否需要身份验证,是 RESTful 还是 SOAP 或其他什么?我只是给了你几个例子的链接。
  • 向我们展示您的代码并就您遇到的问题提出具体问题
  • 阅读 How to Ask 将为您提供网站指南的概述

标签: asp.net sql-server asp.net-web-api xamarin.forms picker


【解决方案1】:

这可能有几个原因,我会检查你的异步方法没有抛出你看不到的异常。异步方法返回一个 Task 对象,如果在其中引发异常,它将在 Task.Exception 中返回的对象中可见。

https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/exception-handling-task-parallel-library

当您将 ObserableCollection 设置为新实例时,也不会调用属性更改事件,您想在集合中添加和删除。

你想改变:

public UsuarioViewModel() {    
    Task<List<TipoUsuario>> task = ApiService.ObterTipoUsuarios();

    tipos = new ObservableCollection<TipoUsuario>(task.Result);    
}

类似于:

public UsuarioViewModel() {    
    Task<List<TipoUsuario>> task = ApiService.ObterTipoUsuarios();

    var temptipos = task.Result;
    foreach(var tipo in temptipos)
    {
        tipos.Add(tipo);
    }
}

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多