2015-04-21 3 views
1

У меня есть ObservableCollection <T>. Я хочу вставить в него различные элементы, а затем сохранить вновь созданный файл в LocalStorage. Как я могу это сделать?Как сохранить файл в LocalStorage?

SQLiteAsyncConnection conn = new SQLiteAsyncConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "Database.db"), true); 
await conn.CreateTableAsync<Musei>(); 
var Dbase = Path.Combine(ApplicationData.Current.LocalFolder.Path, "Database.db"); 
var con = new SQLiteAsyncConnection(Dbase, true); 

var query = await con.Table<Musei>().ToListAsync(); 
ObservableCollection<Musei> favMusei = new ObservableCollection<Musei>(); 

if (query.Count > 0) 
{ 
    favMusei.Clear(); 

    foreach (Musei museifav in query) 
    { 
     favMusei.Add(museifav);    
    } 
} 
+0

Какие проблемы и проблемы возникают у вас при запуске существующего кода .. просьба предоставить дополнительную информацию – MethodMan

+0

Я хотел бы сохранить 'favmusei' в Local Storage – G111

+0

это хорошо .. но какие у вас проблемы при запуске существующего код .. не просто сказать «Я хотел бы сохранить favmusei в локальном хранилище» отладить код и сообщить нам, где происходит сбой. – MethodMan

ответ

0

Я использую файл json для хранения в памяти. JSON - это формат обмена сообщениями с легким весом и широко используется. Вы должны сделать некоторые небольшие изменения в коде, если хотите какой-то другой формат файла.

Ваша коллекция будет сериализована в память во время сохранения и должна быть десериализована при чтении ее из памяти.

Добавить свою собственную общую реализацию коллекции. Чтобы создать вашу ситуацию, я использую простой ObservableCollection<int>. И не забудьте инициализировать коллекцию некоторыми значимыми значениями, здесь я использую инициализацию конструктора по умолчанию.

using System.Collections.ObjectModel; 
using System.Runtime.Serialization.Json; 
using Windows.Storage; 

//Add your own generic implementation of the collection 
//and make changes accordingly 
private ObservableCollection<int> temp; 

private string file = "temp.json"; 

private async void saveToFile() 
{ 
    //add your items to the collection 
    temp = new ObservableCollection<int>(); 

    var jsonSerializer = new DataContractJsonSerializer(typeof(ObservableCollection<int>)); 

    using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(file, CreationCollisionOption.ReplaceExisting)) 
    { 
     jsonSerializer.WriteObject(stream, temp); 
    } 
} 

private async Task getFormFile() 
{ 
    var jsonSerializer = new DataContractJsonSerializer(typeof(ObservableCollection<int>)); 

    try 
    { 
     using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(file)) 
     { 
      temp = (ObservableCollection<int>)jsonSerializer.ReadObject(stream); 
     } 
    } 

    catch 
    { 
     //if some error is caught while reading data from the file then initializing 
     //the collection to default constructor instance is a good choice 
     //again it's your choice and may differ in your scenario 
     temp = new ObservableCollection<int>(); 
    } 
} 

Чтобы добавить некоторые функции в коде вы можете также иметь ensureDataLoaded() функцию, которая позволит обеспечить, что данные считаны из файла JSON.

public async Task ensureDataLoaded() 
{ 
    if (temp.Count == 0) 
     await getFormFile(); 

    return; 
} 

Перед использованием глобальной переменной temp (имеющий ObservableCollection) вызова функции ensureDataLoaded. Это позволило бы избежать ненужных NullPointerExceptions.

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