在Xamarin中连续刷新数据

时间:2018-07-18 12:01:48

标签: c# xamarin xamarin.forms

我正在研究一个显示进出口编号的项目。但是,数字不断变化。这就是为什么我需要一个刷新按钮。我进行了很多搜索,但找不到任何解决方案。

public MainPage()
{
    InitializeComponent();
    var cli = new WebClient();
    cli.Headers[HttpRequestHeader.ContentType] = "application/json";
    string response = cli.UploadString("Can't share company API and token sorry");

    var responseModel = Newtonsoft.Json.JsonConvert.DeserializeObject<Ihap>(response);

    IthalatGunluk.Text = responseModel.Import.ToString();
    IthalatAylik.Text = responseModel.ImportMonthly.ToString();
    IthalatYillik.Text = responseModel.ImportMonthlyPrevious.ToString();

    IhracatGunluk.Text = responseModel.Export.ToString();
    IhracatAylik.Text = responseModel.ExportMonthly.ToString();
    IhracatYillik.Text = responseModel.ExportMonthlyPrevious.ToString();

    Dolar.Text = responseModel.Dolar.ToString();
    Euro.Text = responseModel.Euro.ToString();
}


class Ihap
{
    public double Dolar { get; set; }
    public double Euro { get; set; }
    public int Import { get; set; }
    public int Export { get; set; }
    public int ImportMonthly { get; set; }
    public int ImportMonthlyPrevious { get; set; }
    public int ExportMonthly { get; set; }
    public int ExportMonthlyPrevious { get; set; }
}

3 个答案:

答案 0 :(得分:1)

您可以将构造函数中当前的代码移动到一个单独的方法,然后从构造函数和按钮单击处理程序中调用它:

public MainPage()
{
    InitializeComponent();
    RefreshData();
}

public void RefreshButton_Click(object sender, EventArgs e) => RefreshData();

private void RefreshData()
{
    var cli = new WebClient();
    cli.Headers[HttpRequestHeader.ContentType] = "application/json";
    string response = cli.UploadString("Can't share company API and token sorry");

    var responseModel = Newtonsoft.Json.JsonConvert.DeserializeObject<Ihap>(response);

    IthalatGunluk.Text = responseModel.Import.ToString();
    IthalatAylik.Text = responseModel.ImportMonthly.ToString();
    IthalatYillik.Text = responseModel.ImportMonthlyPrevious.ToString();

    IhracatGunluk.Text = responseModel.Export.ToString();
    IhracatAylik.Text = responseModel.ExportMonthly.ToString();
    IhracatYillik.Text = responseModel.ExportMonthlyPrevious.ToString();

    Dolar.Text = responseModel.Dolar.ToString();
    Euro.Text = responseModel.Euro.ToString();
}

答案 1 :(得分:0)

有三种方法可以引用用户界面。

  1. 使用INotifyPropertyChanged更新您的导入和导出编号。因此,当值更改时,它将更新UI。

  2. 使用Threading timer根据需要的时间间隔加载新的导入和导出编号

  3. 创建ObservableCollection并放置您的导入和导出编号,当编号更新时,它将更新UI。

答案 2 :(得分:0)

您正在通过调用Web服务和API响应的绑定属性来获取数据。

因此,基本上,您的问题是每X秒执行一次操作。

您可以使用线程和计时器(C#计时器-而不是Xamarin.Timer)来定期进行API调用。

像这样:

public static Timer YourTimer;

static void Main(string[] args)
{
    YourTimer = new System.Timers.Timer(1000); //In milliseconds
    YourTimer.Elapsed += new ElapsedEventHandler(RunThis);
    YourTimer.AutoReset = true;
    YourTimer.Enabled = true;
}

private static void RunThis(object source, ElapsedEventArgs e)
{
    //Your API call here
}
  

注意:您将需要使用System.Timers名称空间。

希望有帮助。