经常会遇到要存储一下用户账号密码之类的,让用户下次登录时不需要重新输入账号密码,直接进入主界面。Xamarin.Forms里没有自己的解决方案,还是得调用iOS和Android原生的API才可以实现。

在Xamarin.Forms里怎么实现呢,整体思路是将iOS和Android原生的API分装成一个公共的接口,然后让Xamarin调这个接口,若在Android端则去执行Android端的API,在iOS端则执行iOS端的代码。好了,下面我们看具体实现吧。

1、封装iOS端API##

以下代码在iOS项目里写,单独写成一个类

namespace XamarinJaguarFund.iOS

{

public class UserPreferencesiOS : IUserPreferences

{

public UserPreferencesiOS()

{

}

public void SetString(string key, string value)

{

NSUserDefaults.StandardUserDefaults.SetString(value,key);

}

public string GetString(string key)

{

return NSUserDefaults.StandardUserDefaults.StringForKey(key);

}

public void DeleteString(string key)

{

NSUserDefaults.StandardUserDefaults.RemoveObject(key);

}

}

}

然后设置AppDelegate.cs

namespace XamarinJaguarFund.iOS

{

[Register("AppDelegate")]

public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate

{

public override bool FinishedLaunching(UIApplication app, NSDictionary options)

{

global::Xamarin.Forms.Forms.Init();

OxyPlot.Xamarin.Forms.Platform.iOS.PlotViewRenderer.Init();

App.Init(new UserPreferencesiOS());

App myApp = new App();

LoadApplication(myApp);

return base.FinishedLaunching(app, options);

}

}

}

完成这两步,iOS部分就算封装完毕了。

2、封装Android端API##

以下代码在Android项目写,单独写个类。

namespace XamarinJaguarFund.Droid

{

public class UserPreferencesAndroid : IUserPreferences

{

public UserPreferencesAndroid()

{

}

public void SetString(string key, string value)

{

var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);

var prefsEditor = prefs.Edit();

prefsEditor.PutString(key, value);

prefsEditor.Commit();

}

public string GetString(string key)

{

var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);

return prefs.GetString(key,"");

}

public void DeleteString(string key)

{

var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);

prefs.Edit().Remove(key).Commit();

}

}

}

然后设置MainActivity.cs

namespace XamarinJaguarFund.Droid

{

[Activity(Label = "XamarinJaguarFund.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity

{

protected override void OnCreate(Bundle bundle)

{

TabLayoutResource = Resource.Layout.Tabbar;

ToolbarResource = Resource.Layout.Toolbar;

base.OnCreate(bundle);

global::Xamarin.Forms.Forms.Init(this, bundle);

App.Init(new UserPreferencesAndroid());

App myApp = new App();

LoadApplication(myApp);

}

}

}

完成这两步,Android部分就算封装完毕了。

3、公共部分设置##

在Xamarin项目里单独写个类

namespace XamarinJaguarFund

{

public interface IUserPreferences

{

void SetString(string key, string value);

string GetString(string key);

void DeleteString(string key);

}

}

在app.cs初始化以下

public partial class App : Application

{

public static IUserPreferences UserPreferences { get; private set; }

public static void Init(IUserPreferences userPreferencesImpl)

{

App.UserPreferences = userPreferencesImpl;

}

}

4、使用##

设置值

App.UserPreferences.SetString("token", userObject.token);

App.UserPreferences.SetString("displayName", userObject.displayName);

App.UserPreferences.SetString("username", userObject.username);

查询值

customerName.Text = App.UserPreferences.GetString("displayName");

displayName.Text = App.UserPreferences.GetString("username");

删除值

App.UserPreferences.DeleteString("token"); App.UserPreferences.DeleteString("displayName");

App.UserPreferences.DeleteString("username");

如果要修改某个值,只需使用设置值的方法,值会覆盖。

结语#

有点小复杂,不过理解其核心思想就可以理解了。如有错误之处还望大神给予指点。

xamarin android密码,Xamarin.Forms学习历程(七)——用户偏好设置存储相关推荐

  1. xamarin android 布局,Xamarin.Android 上中下布局

    xml代码: xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par ...

  2. Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数

    16_采用SharedPreferences保存用户偏好设置参数 Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数 2013-03-08 16_采用Shar ...

  3. xamarin android tv,Xamarin TV Scripts

    Introduction Do you like watching that old TV show so much that you want to take it with yourself wh ...

  4. xamarin android框架,Xamarin使用的架构

    Xamarin使用的架构 What framework is used by Xamarin? Xamarin使用的架构? Solution 1解决方法1 Xamarin has "port ...

  5. xamarin android 书,xamarin android 开发

    开始环境vs2017 直接创建android 项目,左边是android studio 的项目目录  右边是vs创建的android 项目目录 结构基本相同,有res对应的Resources文件 加载 ...

  6. xamarin android pdf,Xamarin.Android - 下载pdf和视频到应用空间并打开

    1. 下载创建本地应用内文件时,创建模式必须为 FileCreationMode.WorldReadable Stream fos = OpenFileOutput(pdfName, FileCrea ...

  7. xamarin android 邮件,Xamarin Android:通过标准API(电子邮件,脸谱等)分享图像

    我认为应用程序图标是在您的应用程序专用的目录中创建的,因此其他应用程序无法获取它. 您需要将其保存在其他应用程序可以访问的位置,然后从该位置共享它,如下所示: public void Share (s ...

  8. 我的iOS学习历程 - UISlider(简单的设置一组图片动画)

    今天我们学习的是UISlider,就是平时看视频听音乐等的进度条的设置 今天设置的slider是控制播放一组图片速度的例子: 1.初始化以及设置一些属性 // 初始化UISlider *slider ...

  9. Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件

    ImageView设置图片 JavaFx的ImageView,设置图片不能直接通过属性设置,只能通过代码来设置 ImageView设置图片 首先,我们让fxml对应的那个controller的java ...

最新文章

  1. TensorFlow被曝存在严重bug,搭配Keras可能丢失权重,用户反映一个月仍未修复
  2. Python3.5模块‘OS’‘sys’
  3. mac svn 可视化界面_svn for mac 操作
  4. python中使用rsa加密
  5. React的核心概念
  6. asp语言与php语言的差别,用什么语言进行网页开发最好.php与asp语言的区别
  7. python matplotlib.pyplot.xticks() yticks() (设置x或y轴对应显示的标签)
  8. 江西住建云实名认证怎么弄_王者荣耀无限时间怎么弄 2020年无限时间账号
  9. 整理了一份「生产管理数据分析」方案,解决90%的问题
  10. windows环境:dos 通过ftp连接到vsftpd 显示乱码解决方法
  11. 编写一个函数把华氏温度转换为摄氏温度
  12. python伪造邮件发件地址_Python:向多个地址发送电子邮件
  13. 中国“两高”发布司法解释 依法严惩涉地下钱庄犯罪
  14. XML XPATH simpleXML
  15. 知道cve编号怎么搜poc_想在海南买房不知道该怎么选?快来看看这些热搜楼盘吧!...
  16. python之路-基础篇-002
  17. Java关键字transient
  18. haneWIN Software NFS工具的使用
  19. 四川婚姻登记捷宇SC10T高拍仪技术规格说明书
  20. 行业解读 | 什么是人工智能语音技术?一篇文章让你读懂它

热门文章

  1. b关于bootstrap官网https://v4.bootcss.com/docs/layout/grid/关于栅格布局的学习和实践博客
  2. 介绍一款HCIA、HCIP、HCIE的刷题软件
  3. elementUI中的el-table标签介绍
  4. CVE-2020-17518 Apache Flink 上传路径遍历漏洞复现
  5. win7+thinkpad t400
  6. Python基础 3.4 HTTP协议和静态Web服务器
  7. 【通信】短波通信系统仿真含Matlab源码
  8. fairygui富文本html语法怎么用,文本-FairyGUI 教程-面试哥
  9. 数字货币,已成为理解现代经济不可排斥的一个因素
  10. SDTM--study data tabulation model implementation guide:human clinical trails(临床研究数据模型实施指南)3.4