簡體   English   中英

緩存JSON(Xamarin C#)

[英]Caching JSON (Xamarin C#)

我正在編寫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?

感謝您的幫助和建議。

您可以將序列化的json對象作為字符串存儲到首選項中。

與SharedPreferences等效的Xamarin.Android是一個稱為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);

當然,其中的key與以前用於存儲字符串的相同。 一旦有了mString,就可以將其反序列化為任何復雜的json對象。

您還可以探索可以存儲的其他類型的數據(int,bool ...)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM