2

我创建了一个主屏幕小部件,它从网站获取字符串表。我不想在每次更新时从网络上获取数据,而是想将表格保存到手机中,而不是在更新时从文件中读取。我正在使用 Mono for Android (C#)。

4

2 回答 2

2

这是一种使用 XML 序列化将数据保存到文件系统的方法

    public static bool SaveData<T>(Context context, string fileName, T data)
    {
        try
        {
            using (Stream stream = context.OpenFileOutput(fileName, FileCreationMode.Private))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

                xmlSerializer.Serialize(stream, data);
            }

            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

这是从文件系统加载序列化数据的方法

    public static T LoadData<T>(Context context, string fileName)
    {
        Java.IO.File file = context.GetFileStreamPath(fileName);

        if (file.Exists())
        {
            using (Stream openStream = context.OpenFileInput(fileName))
            {
               using (StreamReader reader = new StreamReader(openStream))
               {
                   try
                   {
                       XmlSerializer serializer = new XmlSerializer(typeof(T));

                       var loadedObject = serializer.Deserialize(reader);

                       return (T)loadedObject;
                   }
                   catch (Exception ex)
                   {
                       // TODO Handle error

                       return default(T);
                   }
               }
            }
        }
        else
        {
            throw new Java.IO.FileNotFoundException("Could not find file " + fileName);
        }
    }

使用这些方法,您可以轻松地保存和加载任何可序列化的对象,例如string[]从网站检索到的对象。

  string[] data = { "one", "two", "three" };

  JavaIO.SaveData(this, "SavedData.txt", data);

  string[] loadedData = JavaIO.LoadData<string[]>(this, "SavedData.txt");
于 2012-11-12T06:11:31.900 回答
1

如果它只是一个简单的列表,那么您可以使用 System.IO.File 加载/保存文本 - 您可以使用 JSON.Net 之类的东西将列表转换为文本。

如果您的数据更加增量,那么您可以改用 SQLite - 尝试 GitHub 上的 SQLite-net ORM 包装器

于 2012-11-11T14:51:42.060 回答