Mono for Android 实用ISharedPreferences 保存配置

 public class Option
    {
        public string OptionName { get; set; }
        public string URL { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }

    }

    public class CCTVConfig
    {
        static ISharedPreferences preference = null;

        public static void Save(Activity a, List<Option> options)
        {
            preference = a.GetSharedPreferences("CCTVConfig", FileCreationMode.Private);
            Android.Content.ISharedPreferencesEditor editor = preference.Edit();
            editor.PutString("CCTVConfigOptions", GetXmlStr(options));
            editor.Commit();
        }

        public static List<Option> Load(Activity a)
        {
            preference = a.GetSharedPreferences("CCTVConfig", FileCreationMode.Private);
            if (preference == null)
                return null;
            List<Option> options = new List<Option>();
            string xmlStr = preference.GetString("CCTVConfigOptions", "");
            if (!string.IsNullOrEmpty(xmlStr))
            {
                XDocument xDoc = XDocument.Parse(xmlStr);
                foreach (XElement element in xDoc.Element("CCTVSettings").Descendants("CCTVSetting"))
                {
                    Option en = new Option();
                    en.URL = element.Element("URL").Value;
                    en.Username = element.Element("Username").Value;
                    en.Password = element.Element("Password").Value;
                    en.OptionName = element.Element("OptionName").Value;
                    options.Add(en);
                }
            }
            return options;
        }

        static string GetXmlStr(List<Option> options)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?><CCTVSettings>");

            if (options != null)
            {
                string resultXml = "<CCTVSetting><OptionName>{0}</OptionName><URL>{1}</URL><Username>{2}</Username><Password>{3}</Password></CCTVSetting>";

                foreach (var o in options)
                {
                    string temp = string.Format(resultXml, FilterXml(o.OptionName), FilterXml(o.URL), FilterXml(o.Username), FilterXml(o.Password));
                    sb.Append(temp);
                }
                sb.Append("</CCTVSettings>");
                return sb.ToString();
            }
            return "";
        }

        /// <summary>
        /// 过滤XML字符
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        static string FilterXml(string source)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(source);
            sb.Replace("&lt;", "<");
            sb.Replace("&gt;", ">");
            sb.Replace("&apos;", "'");
            sb.Replace("&quot;", "\"");
            sb.Replace("&amp;", "&");

            sb.Replace("&", "&amp;");
            sb.Replace("<", "&lt;");
            sb.Replace(">", "&gt;");
            sb.Replace("'", "&apos;");
            sb.Replace("\"", "&quot;");

            return sb.ToString();

        }
    }

posted @   静艳  阅读(332)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
点击右上角即可分享
微信分享提示