2016-08-22 114 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