[英]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.