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("<", "<");
sb.Replace(">", ">");
sb.Replace("'", "'");
sb.Replace(""", "\"");
sb.Replace("&", "&");
sb.Replace("&", "&");
sb.Replace("<", "<");
sb.Replace(">", ">");
sb.Replace("'", "'");
sb.Replace("\"", """);
return sb.ToString();
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具