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?
感谢您的帮助&劝告
您可以将序列化的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以获取更多示例。