2

Web サイトから文字列のテーブルを取得するホームスクリーン ウィジェットを作成しました。更新のたびに Web からデータを取得する代わりに、テーブルを電話に保存し、更新時にファイルから読み取りたいと考えています。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[]これらのメソッドを使用すると、Web サイトから取得したなどのシリアライズ可能なオブジェクトを簡単に保存およびロードできます。

  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-netORMラッパーを試してください

于 2012-11-11T14:51:42.060 に答える