Caching JSON (Xamarin C#)

本文关键字:Xamarin JSON Caching | 更新日期: 2024-10-24 16:17:17

我正在编写Android应用程序,希望得到专业建议。

我有产品分类。

我有这个产品的JSON。

    Array
(
    [0] => Array
        (
            [post_title] => Яблочный десерт
            [post_excerpt] => Мус топленный шоколад, яблоко в карамели с ореховым тестом.
            [img_url] => http://new.murakami.ua/wp-content/uploads/Untitled-1.jpg
            [visibility] => visible
            [price] => 78.00
            [weight] => 90
            [sku] => 594
        )
    [1] => Array
        (
            [post_title] => Сладкий ролл Филадельфия с клубникой и ананасом
            [post_excerpt] => 
            [img_url] => http://new.murakami.ua/wp-content/uploads/roll_sladkiy2.jpg
            [visibility] => visible
            [price] => 68.00
            [weight] => 100
            [sku] => 846
        )
    [2] => Array
        (
            [post_title] => Тирамису
            [post_excerpt] => Бисквит, сыр креметте, сливки, какао, кофе Lavazza, ликер Triple Sec Volare
            [img_url] => http://new.murakami.ua/wp-content/uploads/Tiramisu.jpg
            [visibility] => visible
            [price] => 59.00
            [weight] => 110
            [sku] => 248
        )
    [3] => Array
        (
            [post_title] => Наполеон   
            [post_excerpt] => Торт из слоёных коржей с заварным кремом.
            [img_url] => http://new.murakami.ua/wp-content/uploads/Napoleon.jpg
            [visibility] => visible
            [price] => 58.00
            [weight] => 140
            [sku] => 633
        )
    [4] => Array
        (
            [post_title] => Ассорти мини чизкейков
            [post_excerpt] => Чизкейк с ванильно-сырным муссом, с фисташковым муссом Баваруа и шоколадным крем-брюле, в основе которых ореховый чизкейк с миндального бисквита и крем-сыра Президент.
            [img_url] => http://new.murakami.ua/wp-content/uploads/535_520-Assorti-CHizkejkov.jpg
            [visibility] => visible
            [price] => 84.00
            [weight] => 130
            [sku] => 141
        )
    [5] => Array
        (
            [post_title] => Шоколадно-авокадовый десерт
            [post_excerpt] => Шоколадный бисквит, слой миндаля, шоколадный мусс с авокадо, сироп Амаретто, шоколад.
            [img_url] => http://new.murakami.ua/wp-content/uploads/SHokoladno-avokadovyj-desert.jpg
            [visibility] => visible
            [price] => 64.00
            [weight] => 100
            [sku] => 225
        )
)

我需要缓存它,然后在UI中显示一些字段。

现在我下载它并在UI中显示,就像这样。

下载:

    string url2 = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=74";
            JsonValue json = await FetchAsync(url2);
 private async Task<JsonValue> FetchAsync(string url)
        {
            System.IO.Stream jsonStream;
            JsonValue jsonDoc;
            using (var httpClient = new System.Net.Http.HttpClient())
            {
                jsonStream = await httpClient.GetStreamAsync(url);
                jsonDoc = JsonObject.Load(jsonStream);
            }
            return jsonDoc;
        }

和显示:

 private void ParseAndDisplay(JsonValue json)
    {

        TextView productname = FindViewById<TextView>(Resource.Id.posttittle);
        TextView price = FindViewById<TextView>(Resource.Id.price);
        TextView weight = FindViewById<TextView>(Resource.Id.weight);
        ImageView imagen = FindViewById<ImageView>(Resource.Id.image1);
        ImageButton add = FindViewById<ImageButton> (Resource.Id.add);
        JsonValue firstitem = json[0];
        //Console.Out.WriteLine(firstitem["post_title"].ToString());
        productname.Text = firstitem["post_title"];
        price.Text = firstitem["price"] + " грн";
        weight.Text = firstitem["weight"] + "г";
        var imageBitmap = GetImageBitmapFromUrl(firstitem["img_url"]);
        imagen.SetImageBitmap(imageBitmap);

    }

当用户进入产品类别时,我如何为这个JSON创建缓存,而不是每次都下载这个JSON?

感谢您的帮助&劝告

Caching JSON (Xamarin C#)

您可以将序列化的json对象作为字符串存储到首选项中。

Xamarin.Android版的SharedPreferences是一个名为ISharedPreferences的界面。

您需要获得一个ISharedPreferences实例,并使用它更新/更改/删除首选项。有几种方法可以获得ISharedPreferences:的实例

  • Activity.GetPreferences会为您获取特定于该活动的首选项。可能不是你想要的。

  • Context.GetSharedPreferences可以为您获取应用程序级别的首选项。

  • PreferenceManager.DefaultSharedPreferences将为您提供给定上下文的ISharedPreference实例。

以同样的方式使用它,你将能够轻松地跨端口移植Android代码。

例如,要保存字符串,可以执行以下操作:

ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext);
ISharedPreferencesEditor editor = prefs.Edit ();
editor.PutString(key, value);
// editor.Commit();    // applies changes synchronously on older APIs
editor.Apply();        // applies changes asynchronously on newer APIs

要读取保存的值,可以执行以下操作:

ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences (mContext);
mString = prefs.GetString(key, default_value_to_return_in_case_no_value_is_found);

Where键当然与以前用于存储字符串的键相同。一旦有了mString,就可以将其反序列化为任何复杂的json对象。

您还可以探索可以存储的其他类型的数据(int,bool…)

请在此处查看https://forums.xamarin.com/discussion/4758/android-shared-preference以获取更多示例。