微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Firebase Xamarin 查询数据

如何解决从 Firebase Xamarin 查询数据

我正在尝试在我的 xamarin 表单应用中过滤来自 firebase 的数据。

这是我在 .xaml 页面中的列表视图的代码

<ListView x:Name="listView" ItemsSource="{Binding ProductList}" HasUnevenRows="true" SeparatorVisibility="None" BackgroundColor="#fafafa">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout Margin="0,40">
                              <Label Text="{Binding Name}" FontSize="Large" TextColor="Black"/>                                           
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

在 xaml 页面的 cs 文件中,我有内部构造函数

BindingContext = new Productsviewmodel(userId,Navigation,productType);

这是我的视图模型

public class Productsviewmodel : Baseviewmodel
{
    public Guid UserId { get; set; }
    public string ProductType { get; set; }

    private APIService services;

    public INavigation Navigation { get; }

    private ObservableCollection<ProductModel> _ProductList = new ObservableCollection<ProductModel>();
    public ObservableCollection<ProductModel> ProductList
    {
        get { return _ProductList; }
        set
        {
            _ProductList = value;
            OnPropertyChanged();
        }
    }

    public Productsviewmodel(Guid userId,INavigation navigation,string productTyp)
    {
        UserId = userId;
        ProductType = productTyp;
        services = new APIService();
        Navigation = navigation;
        ProductList = services.GetProducts();
    }
}

还有我的 APIService 类

internal ObservableCollection<ProductModel> GetProducts()
    {
        var outfitFeedData = firebase
            .Child("Products")
            .AsObservable<ProductModel>()
            .AsObservableCollection();

        return outfitFeedData;
    }

一切正常,直到我开始查询结果,然后我开始收到转换类型异常。

EG:

    internal ObservableCollection<ProductModel> GetProducts()
    {
        var outfitFeedData = firebase
            .Child("Products")
            .AsObservable<ProductModel>()
            .AsObservableCollection().Select(item => new ProductModel
            {
                Type = "K",});

        return outfitFeedData;
    }

解决方法

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.ObjectModel.ObservableCollection”。存在显式转换(您是否缺少强制转换?)

从您的错误消息中,您可以看到您将通过 LINQ 结果获得 System.Collections.Generic.IEnumerable 类型的数据 OutfitFeedData。

internal ObservableCollection<ProductModel> GetProducts()
{
    var outfitFeedData = firebase
        .Child("Products")
        .AsObservable<ProductModel>()
        .AsObservableCollection().Select(item => new ProductModel
        {
            Type = "K",});

    return outfitFeedData;
}

但是你通过GetProducts方法将List数据类型转换为ObservableCollection,我认为是问题所在。

请修改 ObservableCollection ProductList 如下代码:

 private List<ProductModel> _ProductList;
    public List<ProductModel> ProductList
    {
        get { return _ProductList; }
        set
        {
            _ProductList = value;
            OnPropertyChanged();
        }
    }

然后更改 GetProducts() 方法的返回值。

internal List<ProductModel> GetAllPersons()
    {

        var outfitFeedData= (firebase
          .Child("Products")
          .OnceAsync<ProductModel>()).Select(item => new ProductModel
          {
              Type = "K",}).ToList();
        return outfitFeedData;

    }

注意:我建议您可以实现 Async 和 Await 以从 firebase 获取数据,如下所示:

  public async Task<List<Person>> GetAllPersons()
    {

        return (await firebase
          .Child("Persons")
          .OnceAsync<Person>()).Select(item => new Person
          {
              Name = item.Object.Name,PersonId = item.Object.PersonId
          }).ToList();
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。