2016-08-22 148 views
1

當方法OnDestroy被調用時,我需要保存文件,並調用方法OnCreate時加載相同的文件。在這個時候,我可以閱讀從資產json文件很容易(這工作正常)Xamarin android數據保存到json文件

StreamReader reader = new StreamReader(Assets.Open("reiksmes.json")); 
string JSONstring = reader.ReadToEnd(); 
Daiktai myList = JsonConvert.DeserializeObject<Daiktai>(JSONstring); 
items.Add(myList); 

,但我有一些問題,當我嘗試Daiktai類數據存儲(寫)到我上面打開相同的文件。我想:

string data = JsonConvert.SerializeObject(items); 
File.WriteAllText("Assets\\reiksmes.json", data); 

這種嘗試,我得到錯誤System.UnauthorizedAccessException: Access to the path "/Assets eiksmes.json" is denied.

也試過:

string data = JsonConvert.SerializeObject(items); 
StreamWriter writer = new StreamWriter(Assets.Open("reiksmes.json")); 
writer.WriteLine(data); 

以及與此嘗試,我得到錯誤System.ArgumentException: Stream was not writable.

總結: 我想我選擇了壞目錄(Assets),我需要保存和加載數據(格式爲json)。那麼我需要在哪裏保存它們以及如何(舉例)?

+0

資產,是指包含在應用程序包文件,並只讀 – Jason

+0

所以我在哪裏需要保存的文件,你可以給我例子,如何拯救他們? – armandasalmd

+0

資產是隻讀的,但是在你的字符串中你有'\ r'它應該是'\\ r'以避免它成爲一個換行 –

回答

1

您無法將任何內容保存到資產。你可以從中讀取它。您必須將該文件保存到其他文件夾。

 var fileName = "reiksmes.json"; 
     string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); // Documents folder 
     var path = Path.Combine(documentsPath, fileName); 

     Console.WriteLine(path); 
     if (!File.Exists(path)) 
     {     
      var s = AssetManager.Open(fileName); 
      // create a write stream 
      FileStream writeStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); 
      // write to the stream 
      ReadWriteStream(s, writeStream); 
     } 
+0

好的,它的工作,但我現在可以在我的電腦上找到這個文件? – armandasalmd

+0

您的意思是您的計算機上瀏覽設備文件系統? – neo

+0

例如,如果我想自己修改這個文件,我需要搜索它來打開這個文件? – armandasalmd