如何在Xamarin.Forms中获取以前的数据

时间:2018-06-19 08:35:31

标签: c# xamarin.forms

我正在开发一个应用程序,它将显示土耳其的更新美元和欧元汇率。我想打印绿色和红色箭头,具体取决于自上次用户打开应用程序以来费率是上升还是下降。所以我的问题是如何获取以前的数据以及如何将它们与当前数据进行比较?

代码隐藏;

namespace Subasi.A.M.D
{
    public partial class MainPage : ContentPage
    {
        float banknoteSellingUSD = 0;
        float banknoteBuyingUSD = 0;

                public MainPage()
        {
            InitializeComponent();

            if (Device.OS == TargetPlatform.iOS)
                Padding = new Thickness(10, 50, 0, 0);
            else if (Device.OS == TargetPlatform.Android)
                Padding = new Thickness(10, 20, 0, 0);
            else if (Device.OS == TargetPlatform.WinPhone)
                Padding = new Thickness(30, 20, 0, 0);
        }






            private void Button_Clicked(object sender, EventArgs e)
            {


                XmlDocument doc1 = new XmlDocument();
                doc1.Load("http://www.tcmb.gov.tr/kurlar/today.xml");
                XmlElement root = doc1.DocumentElement;
                XmlNodeList nodes = root.SelectNodes("Currency");

                foreach (XmlNode node in nodes)
                {

                    var attributeKod = node.Attributes["Kod"].Value;
                    if (attributeKod.Equals("USD"))
                    {

                        var GETbanknoteSellingUSD = node.SelectNodes("BanknoteSelling")[0].InnerText;
                        var GETbanknoteBuyingUSD = node.SelectNodes("BanknoteBuying")[0].InnerText;
                     //if (banknoteSellingUSD > float.Parse(GETbanknoteSellingUSD)) isusdup = false;
                    //else isusdup = true;

                     banknoteSellingUSD = float.Parse(GETbanknoteSellingUSD);
                     banknoteBuyingUSD = float.Parse(GETbanknoteBuyingUSD);
                        labelUSDBuying.Text = banknoteSellingUSD.ToString("0.00");
                        labelUSDSelling.Text = banknoteBuyingUSD.ToString("0.00");




                } 

                    var attributeKod1 = node.Attributes["Kod"].Value;
                    if (attributeKod1.Equals("EUR"))
                    {
                        var GETbanknoteSellingEU = node.SelectNodes("BanknoteSelling")[0].InnerText;
                        var GETbanknoteBuyingEU = node.SelectNodes("BanknoteBuying")[0].InnerText;
                        var banknoteSellingEU = float.Parse(GETbanknoteSellingEU);
                        var banknoteBuyingEU = float.Parse(GETbanknoteBuyingEU);
                        labelEUSelling.Text = banknoteSellingEU.ToString("0.00");
                        labelEUBuying.Text = banknoteBuyingEU.ToString("0.00");





                    }

                }

            }
        }
    }

2 个答案:

答案 0 :(得分:0)

  

打印绿色和红色箭头,具体取决于自上次用户打开应用程序以来费率是上升还是下降

要实现此目的,您必须存储以前的值。最简单的方法可能是使用属性字典(see here)。您可以在其中存储简单属性。

您可以在类

中封装行为
public class ExchangeCourseSource : IExchangeCourseSource
{
    public ExchangeCourseSource(XmlDocument sourceDocument)
    {
        this.sourceDocument = sourceDocument;
    }

    public ExchangeCourse GetCourse(string currency)
    {
        // parse from XML (see your code)
    }

}

class ExchangeCourse
{
    public string Currency { get; set; }
    public double ExchangeRate { get; set; }
    public double Difference { get; set; }
}

并用一个类来装饰它,该类存储和检索来自属性字典的课程

public class StoredExchangeCourseSourceDecorator : IExchangeCourseSource
{
    public ExchangeCourseSource(IExchangeCourceSource source, Application application)
    {
        this.source = source;
        this.application = application;
    }

    public ExchangeCourse GetCourse(string currency)
    {
        var exchangeCourse = source.GetCourse(currency);
        if(HasStoredCourse())
        {
            var storedCourse = GetStoredCourse(currency);
            exchangeCourse.Difference = exchangeCourse.ExchangeRate - storedCourse;
        }
        StoreCourse(exchangeCourse);
        return exchangeCourse;
    }

    private bool HasStoredCourse(string currency)
    {
        return application.Properties.ContainsKey(currency);
    }

    private double GetStoredCourse(string currency)
    {
        return (double)application.Properties[currency];
    }

    private void StoreCourse(ExchangeCourse exchangeCourse)
    {
        application.Properties[exchangeCourse.Currency] = exchangeCourse.ExchangeRate;
        application.SavePropertiesAsync().Wait();
    }
}

答案 1 :(得分:0)

好的,所以要回答这个问题,你必须在某处存储数据,最简单的方法是在ISharedPreferences中保存和恢复数据。

来自AndroidDeveloper

  

如果您不需要存储大量数据,并且不需要   结构,你应该使用SharedPreferences。 SharedPreferences   API允许您读取和写入持久键值对   原始数据类型:布尔值,浮点数,整数,长整数和字符串。

     

键值对被写入持久存在于用户之间的XML文件中   会话,即使您的应用程序被杀死。您可以手动指定名称   对于文件或使用每个活动文件来保存您的数据。

因此,它是存储一些信息并检索它们的好地方。

您所要做的就是从ISharedPreferences获取实例并使用ISharedPreferencesEditor插入和检索数据。

您可以在Android.Content Namespace

中找到它

要保存数据,您可以应用以下代码:

ISharedPreferences preference = PreferenceManager.GetDefaultSharedPreferences(this);
ISharedPreferencesEditor editor = preference.Edit();
editor.PutString("key", "Value");
editor.Apply();

在您的情况下,您可以PutFloat

因此,保存了"Value"的数据,并使用名为"key"的密钥保存

然后您可以通过以下方式检索数据:

ISharedPreferences preference = PreferenceManager.GetDefaultSharedPreferences(this);
var a = preference .GetString("key", "null");//"null" is the default value if the value not found. and the key, it to retrieve a specific data as we stored the data with the key named "key"

在您的情况下,请使用GetFloat 因此,您将值存储在变量a。

您所要做的就是:在新数据发生变化时将数据存储在Sharedpreference中,或者在应用关闭时调用OnSleep()方法,然后在应用中的OnCreate()方法中调用保存在SharedPreference中的数据,并将其与新数据进行比较。