在 Xamarin.Forms 中调用异步 GetDataFromServer 的位置?

和平力量

调用GetDataFromServer方法的最佳位置在哪里我的直觉和理由说它属于存储库,但我不知道在哪里调用它。我试图在构造函数中调用它,但效果不太好。它有一个异步方法的问题。

public class SQLiteRepository : ISQLiteRepository
    {
        private HttpClient _httpClient = new HttpClient();
        private readonly SQLiteAsyncConnection _efContext;

        public SQLiteRepository()
        {
            _efContext = DependencyService.Get<ISQLiteDb>().GetAsyncConnection();
            _efContext.CreateTableAsync<EfPartner>();
        }

        public async Task<IEnumerable<EfPartner>> GetAllPartnersAsync()
        {
            try
            {
                var partners = await _efContext.Table<EfPartner>().ToListAsync();
                return partners;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public async Task GetDataFromServerAsync()
        {
            try
            {
                var partners = await GetPartnersFromServerAsync();
                var companies = await GetCompaniesFromServerAsync();

                await _efContext.InsertAllAsync(partners);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private async Task<IEnumerable<EfPartner>> GetPartnersFromServerAsync()
        {
            try
            {
                var jsonObject = await _httpClient.GetStringAsync(Constants.PartnersUrl);
                var dotNetObject = JsonConvert.DeserializeObject<List<EfPartner>>(jsonObject);

                return new List<EfPartner>(dotNetObject);
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        private async Task<IEnumerable<EfCompany>> GetCompaniesFromServerAsync()
        {
            try
            {
                var jsonObject = await _httpClient.GetStringAsync(Constants.CompaniesUrl);
                var dotNetObject = JsonConvert.DeserializeObject<List<EfCompany>>(jsonObject);

                return new List<EfCompany>(dotNetObject);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

我从 PartnersListPage.xaml.cs 调用了 GetDataFromServerAsync -> 感觉不对。
我很感激任何帮助。
谢谢你。

============================ 更新 ====================== ========
我正在开发的应用程序在 MasterDetailPage 中创建页面,如下所示:

private void MenuListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
      if (e.SelectedItem == null)
        return;

      var menuItem = e.SelectedItem as EfMenuItem;

      if (menuItem == null)
        return;

      var page = (Page)Activator.CreateInstance(menuItem.TargetPage);
      page.Title = menuItem.Title;

      Detail = new NavigationPage(page);

      IsPresented = false;

      MdpMasterPage.MenuListView.SelectedItem = null;
    }

这是 PartnersListPage.xaml.cs,现在从哪里调用 GetDataFromServer:

public partial class PartnersListPage : ContentPage
    {
        private readonly SQLiteRepository _repo;

        public PartnersListPage()
        {
            InitializeComponent();

            _repo = new SQLiteRepository();            
        }

        protected override async void OnAppearing()
        {
            await _repo.GetDataFromServerAsync();
            var partners = await _repo.GetAllPartnersAsync();

            InitializeGrid(partners);

            base.OnAppearing();
        }
马里奥·加尔文

这是一个与 MVVM 相关的重要主题,您正在做的是“正确的”,但是一旦您的应用程序变大,它可能会在以后出现问题,让我们想象一下这个场景:

用户是一个绝望的人,他/她想快速浏览你的应用程序,他/她打开这个特定页面 5 或 10 次,然后会发生什么?OnAppearing()每次用户登陆此页面时都会调用您的方法,并会创建一个新线程,例如您的应用程序将开始在性能部分表现不佳。(特别是在 Android 上)。

所以我的建议是使用 MVVM 框架来处理基于模式的这些情况,这是一个使用 Prism 的小教程:

https://xamgirl.com/prism-in-xamarin-forms-step-by-step-part-1/

关于您的问题,您的 UIListView特别是您的ItemSource(如果您使用的是 ListView)属性应该绑定到您的GetAllPartnersAsync()返回类型。

如果情况并非如此,并且基于上下文,我想InitializeGrid(partners);是在您的 XAML 类中为网格创建单元格,因此我想您可以在正确创建 UI 的情况下逐步调试。网格没有 ItemSource 属性

如果你想要一个带有 ItemSource 属性的网格,我建议你起诉这个:

https://github.com/Manne990/XamTest

https://github.com/daniel-luberda/DLToolkit.Forms.Controls/tree/master/FlowListView

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Xamarin Forms中的PCL中以同步方法调用异步函数

来自分类Dev

如何在 Xamarin Forms 中获取设备的 GPS 位置?

来自分类Dev

如何在Xamarin.Forms.Map中获取当前位置或移动到当前位置

来自分类Dev

Xamarin Forms:如何实现位置共享功能?

来自分类Dev

无法获取当前位置 Xamarin.Forms

来自分类Dev

如何使用CrossMediaManager从Xamarin.Forms中的证书位置播放MP3文件

来自分类Dev

我应该将 MessageCenter 的订阅放在我的 Xamarin.Forms 应用程序中的什么位置?

来自分类Dev

Xamarin Forms:如何在ListView内绑定Xamarin.forms.Maps的位置值?

来自分类Dev

XAML中的Xamarin Forms TableView

来自分类Dev

Xamarin.Forms中的LongPressGestureRecognizer

来自分类Dev

sqllite xamarin.forms异步停止响应

来自分类Dev

初始化 Xamarin.Forms 应用程序时找不到调用异步方法的方法

来自分类Dev

来自ViewModel的Xamarin Forms调用命令

来自分类Dev

Xamarin Forms asmx webservice 多次调用

来自分类Dev

未调用 Xamarin Forms 图像 TapGestureRecognizer 命令

来自分类Dev

Onlaunched 中的 Xamarin.Forms.Forms.Init(e) FileNotFoundException

来自分类Dev

Xamarin.Forms / Xamarin iOS 中 Akavache 中的可能错误

来自分类Dev

xamarin.forms中的加载程序图像?

来自分类Dev

Xamarin.forms中的音频录制

来自分类Dev

在Xamarin.Forms ScrollView中水平滚动

来自分类Dev

xamarin.forms中的导航如何工作?

来自分类Dev

Xamarin Forms Labs中的RepeaterView <T>

来自分类Dev

在Xamarin Forms ListView中停止细胞回收

来自分类Dev

查看Xamarin.Forms中的绑定错误

来自分类Dev

Xamarin.Forms中的分隔符

来自分类Dev

在Xamarin.Forms布局中添加空间?

来自分类Dev

Xamarin.Forms中的RowSpan和ColumnSpan

来自分类Dev

在Tableview xamarin.forms中创建Listview

来自分类Dev

Xamarin.Forms中的水平Listview

Related 相关文章

  1. 1

    在Xamarin Forms中的PCL中以同步方法调用异步函数

  2. 2

    如何在 Xamarin Forms 中获取设备的 GPS 位置?

  3. 3

    如何在Xamarin.Forms.Map中获取当前位置或移动到当前位置

  4. 4

    Xamarin Forms:如何实现位置共享功能?

  5. 5

    无法获取当前位置 Xamarin.Forms

  6. 6

    如何使用CrossMediaManager从Xamarin.Forms中的证书位置播放MP3文件

  7. 7

    我应该将 MessageCenter 的订阅放在我的 Xamarin.Forms 应用程序中的什么位置?

  8. 8

    Xamarin Forms:如何在ListView内绑定Xamarin.forms.Maps的位置值?

  9. 9

    XAML中的Xamarin Forms TableView

  10. 10

    Xamarin.Forms中的LongPressGestureRecognizer

  11. 11

    sqllite xamarin.forms异步停止响应

  12. 12

    初始化 Xamarin.Forms 应用程序时找不到调用异步方法的方法

  13. 13

    来自ViewModel的Xamarin Forms调用命令

  14. 14

    Xamarin Forms asmx webservice 多次调用

  15. 15

    未调用 Xamarin Forms 图像 TapGestureRecognizer 命令

  16. 16

    Onlaunched 中的 Xamarin.Forms.Forms.Init(e) FileNotFoundException

  17. 17

    Xamarin.Forms / Xamarin iOS 中 Akavache 中的可能错误

  18. 18

    xamarin.forms中的加载程序图像?

  19. 19

    Xamarin.forms中的音频录制

  20. 20

    在Xamarin.Forms ScrollView中水平滚动

  21. 21

    xamarin.forms中的导航如何工作?

  22. 22

    Xamarin Forms Labs中的RepeaterView <T>

  23. 23

    在Xamarin Forms ListView中停止细胞回收

  24. 24

    查看Xamarin.Forms中的绑定错误

  25. 25

    Xamarin.Forms中的分隔符

  26. 26

    在Xamarin.Forms布局中添加空间?

  27. 27

    Xamarin.Forms中的RowSpan和ColumnSpan

  28. 28

    在Tableview xamarin.forms中创建Listview

  29. 29

    Xamarin.Forms中的水平Listview

热门标签

归档