2016-04-21 2 views
0

Я пишу приложение для Android и хочу получить профессиональный совет.Кэширование JSON (Xamarin C#)

У меня есть категория с продуктами.

У меня есть 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 
     ) 

) 

Мне нужно кэшировать его, а затем показывать некоторые поля в пользовательском интерфейсе.

Теперь я загружаю его и показываю в пользовательском интерфейсе, вот так.

Загрузка:

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 каждый раз, когда пользователь переходит в категорию продукта?

Спасибо за помощь & совет.

+0

напишите файл json во внутреннем хранилище, а затем используйте –

+0

Файл с расширением .json? @JagadeeshGovindaraj –

+0

просто напишите txt-файл –

ответ

0

Вы можете сохранить сериализованный объект 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); 

Где ключ, конечно же, ранее использовались для Сохраните строку. Как только у вас есть mString, вы можете десериализовать его на любой сложный объект json.

Вы можете также исследовать другие типы данных, которые можно хранить (междунар, BOOL ...)

Проверить здесь https://forums.xamarin.com/discussion/4758/android-shared-preference больше примеров.

Смежные вопросы