如何在rest api从服务器获取数据时显示UIActivityIndi catorView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在rest api从服务器获取数据时显示UIActivityIndi catorView相关的知识,希望对你有一定的参考价值。

我想在从服务器接收数据时显示UIActivityIndi​​catorView。我试过了,但它不可见:

public partial class MyFirst: UIViewController
    {
        UIActivityIndicatorView spinner;

        public MyFirst(IntPtr handle) : base(handle)
        {
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

              picker.ValueChanged += (sender, e) =>
             {
                 loadDetails(picker.SelectedValueId);
             };

            spinner = new UIActivityIndicatorView
            {
                Frame = new CGRect(0, 0, 60, 60),
                Color = UIColor.Black
            };

            spinner.Center = new CGPoint(View.Bounds.Width / 2, 
            View.Bounds.Height / 2);
            View.AddSubview(spinner);

       }

      public void loadDetails(string userId)
      {
          spinner.StartAnimating();

          var client = new RestClient("my web service URL");
          var request = new RestRequest(Method.POST);
          request.AddParameter("userid", userId);

          IRestResponse response = client.Execute(request);
          var content = response.Content;

          var deserializedObject = JsonConvert.DeserializeObject<FleetList>(content);
          var fleets = deserializedObject.ownersdara;

          if (fleets.Count > 0)
          {
               spinner.StopAnimating();
               tableView.Source = new tableSource(fleets .ToArray());
               tableView.ReloadData();
          }               
     }
}

在这里,我使用restsharp来调用Web服务。现在,当我从picker更改值时,它将调用loadDetails函数。在这个函数中,我写了spinner.StartAnimating();但它没有显示。

我从服务器获取所有数据后绑定TableView数据源。

在接收数据时调用其余API并在获取所有数据后再次隐藏它时,我怎么能show UIActivityIndicatorView

答案

我在我身边做了测试,你应该把ActivityIndicatorViewStyle设置为UIActivityIndicatorView,之后它应该可以工作了。

另一答案

我在viewWillAppear(_ animated:Bool)上调用了api,因为我想在屏幕出现时获取数据。我在这里从firebase获取数据。始终在从数据库获取数据时使用完成处理程序,该数据库将在显示微调器的同时在后台获取数据,并且一旦获取数据,它将向用户显示。

   //Start your spinner before calling api
    self.startAnimating()
    var ref: DatabaseReference!
    ref = Database.database().reference(fromURL: kFirebaseLink)
    ref.observe(DataEventType.value, with: { (snapshot) in
        print("data fetched of : (snapshot)")
        if let dict = snapshot.value as? [String : AnyObject] {
            //fill array from the data fetched from database

            //Stop your spinner here when your data is fetched.
            self.stopAnimating()
            if self.array.count > 0 {
                 // Data fetced from database. populate table
                 self.tblView.reloadData()
            }else{
                 // there are no data in Database.

            }
        }

    })

以上是关于如何在rest api从服务器获取数据时显示UIActivityIndi catorView的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 AJAX、Django REST API 和 jQuery 以模式形式更新记录时显示外键字段名称而不是 ID

当 API 返回空数据时显示警告(Vue.js / Axios)

REST api 的 Spring 安全性在身份验证失败时显示浏览器弹出窗口

如何在 kivymd 功能开始时显示加载屏幕?

使用 dxTreeList 在页面加载时显示选定的节点

Flutter - 让应用在设备离线时显示之前获取的数据