gpt4 book ai didi

c# - 在 Xamarin.Android/Xamarin.iOS 中使用 Akavache

转载 作者:行者123 更新时间:2023-11-30 13:57:59 24 4
gpt4 key购买 nike

我已经成功获得了Akavache在 Windows 桌面上工作,.NET 4.5 WPF 项目,但是当我尝试为 Xamarin(iOS 和 Android)目标构建它时,BlobCache 单例未正确初始化。 BlobCache.Secure 为空。 (我已经尝试过 SQLite 和 'vanilla' 构建)

老实说,我发现 Akavache 的示例/文档有点单薄。我不是 Reactive 东西的用户,我发现 Paul 的很多代码都非常不透明。

我只是想为跨平台应用做一些非常简单、安全的应用状态缓存。

// where we store the user's application state
BlobCache.ApplicationName = "myApp";
BlobCache.EnsureInitialized();

public AppState State
{
get
{
return _appState;
}
set
{
_appState = value;
}
}

public void Load()
{
try
{
State = BlobCache.Secure.GetObjectAsync<AppState>.FirstOrDefault();
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
State = new AppState();
}
}

public void Save()
{
try
{
BlobCache.Secure.InsertObject("AppState", State);
}
catch(Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}

最佳答案

因此,您现在必须在 Xamarin 上执行一些愚蠢的技巧,我最近才发现这些技巧。我将把这些添加到文档中(或者在 Android 的情况下,只修复错误)

Xamarin.iOS

在 iOS 上,Type.GetType() 不会加载程序集,这与任何其他平台都不一样。所以,你必须在你的 AppDelegate 中运行这个愚蠢的鹅代码:

var r = new ModernDependencyResolver();
(new ReactiveUI.Registrations()).Register((f,t) => r.Register(f, t));
(new ReactiveUI.Cocoa.Registrations()).Register((f,t) => r.Register(f, t));
(new ReactiveUI.Mobile.Registrations()).Register((f,t) => r.Register(f, t));

RxApp.DependencyResolver = r;
(new Akavache.Registrations()).Register(r.Register);
(new Akavache.Mobile.Registrations()).Register(r.Register);
(new Akavache.Sqlite3.Registrations()).Register(r.Register);

通常,此代码运行 AutoMagically™。

Xamarin.Android

注册在 Xamarin.Android 上运行良好,但由于我怀疑 Akavache 中存在错误,您可能必须注册 AutoSuspend(即使您不使用它)。

  1. 在您的所有事件中,声明 AutoSuspendActivityHelper autoSuspendHelper;
  2. 在构造函数中,添加:

    autoSuspendHelper = new AutoSuspendActivityHelper(this);
    autoSuspendHelper.OnCreate(bundle);
  3. 覆盖 OnPauseOnResumeOnSaveInstanceState 并调用适当的 autoSuspendHelper 方法,即:

    autoSuspendHelper.OnPause();

麻烦多了?

请通过发送电子邮件至 paul@github.com 或在 github/akavache 提交问题让我知道.我已经使用 Akavache 发布了一个在 iOS 和 Android 上运行的生产应用程序,它确实有效,但我意识到要让这些东西正常工作可能有点棘手。

关于c# - 在 Xamarin.Android/Xamarin.iOS 中使用 Akavache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18837412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com