问题标签 [akavache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
system.reactive - Akavache 无法在 Windows 8.1 通用应用程序中运行
我正在尝试在 Windows 通用应用程序中使用 Akavache(目前为 8.1,使用 ReactiveUI 6.5)。
为了确保它与我的架构无关,我做了一个空的解决方案,其中包含所有必要的包和要求(两个平台的 VC++),但我仍然遇到同样的问题。这对我来说是一个障碍,因为我希望我的所有查询都被缓存。
这是代码:
编辑经过一些调试,Windows Phone 8.1 Silverlight 可以工作,而不是 Jupiter。
那么缺少什么?
我正在使用 RXUI 6.5(最新)和 Windows Phone 8.1(Jupiter)(共享通用项目)
更新:Akavache.Sqlite3 导致问题。InMemoryCache 正在工作(删除 Akavache.Sqlite3 “修复”了问题),但不是 Sqlite3。此外,注册 BlobCache 的不同类型的缓存(从https://github.com/akavache/Akavache/blob/3c1431250ae94d25cf7ac9637528f4445b131317/Akavache.Sqlite3/Registrations.cs#L32复制粘贴)显然正在工作。所以我想注册类是'工作不正常,呼叫
new Akavache.Sqlite3.Registrations().Register(Locator.CurrentMutable);
不工作。
编辑: 我的临时解决方案是将其复制粘贴到我的应用程序中,然后在 BlobCache.ApplicationName 之后调用它。它有效,但从技术上讲,我不应该这样做。
谢谢你的帮助
c# - 如果缓存值存在,Akavache GetAndFetchLatest 永远不会获取最新的
我正在尝试在 Xamarin.Forms 项目中使用Akavache GetAndFetchLatest 方法,但它没有按我预期的那样工作,并且希望有人能够发现我哪里出错了。
我正在调用这样的方法:
我的应用程序第一次启动时,FetchOrganizations 方法按预期调用,我可以看到我的本地服务器正在处理请求。但是,一旦 Akavache 缓存了数据,它只会返回缓存,而不会再次调用 FetchOrganizations 方法。我的服务器永远不会看到另一个请求。如果我使用较短的超时时间,缓存到期时将调用 FetchOrganizations 方法。如您所见,我尝试使用 fetchPredicate 参数,但这似乎没有帮助。
有没有另一种方法可以让 GetAndFetchLatest 始终尝试获取新数据?我是否误解了 fetchPredicate 的工作原理?
json - 如何为 Akavache 设置 JsonSerializerSettings?
我已经为 JSON.NET 设置了全局转换器默认值,如下所示:
这适用于我的其余代码(正在使用“QuestionTypeConverter”并按预期工作),但是,当从 Akavache 缓存中检索对象时,我的“QuestionTypeConverter”被忽略,因此我的对象无法正确反序列化。如何通过 Akavache 强制使用我的自定义类型转换器或让 Akavache 使用 JSON.NET 的默认设置?
c# - Akavache 的 GetObject等待时挂起。知道这里有什么问题吗?
我有一个 Xamarin.Forms 应用程序,在我的 App 类中有这段代码(是的,这只是演示问题的示例):
密钥“用户”不存在,所以我希望得到一个 KeyNotFoundException。但是我从来没有看到这个异常被抛出。相反,它只是“挂起”并且永远不会从 await GetObject 调用返回。
我正在使用 Android 5.0 的手机上运行它。
任何想法如何解决这一问题?我在做一些根本错误的事情吗?
更新:附带说明:可以尝试检查密钥是否确实存在于缓存中,然后才从缓存中检索它,而不是立即尝试 GetObject。但是,如果我没记错的话,除了调用 GetObject 并捕获上面示例中的异常之外,没有其他方法可以进行检查。对于只想知道某个项目是否存在的情况,这似乎并不理想。也许在 Akavache 中使用“Exists()”方法会很不错?或者,也许我错过了什么?
Update2:将示例更改为不在构造函数中使用异步方法。只是为了证明这不是问题所在。
Update3:从构造函数中删除调用。当我从代码中的任何位置调用 BlockingGetExternalUser 时,等待仍会挂起。
c# - 在缓存中持久化派生类型
我想使用 GetAndFetchLatest 将我的派生类型保存在 Akavache 的缓存中,但我遇到了一些困难。我的 POCO 如下:
这些类型存储在 ObserverableCollection 中。GetAndFetchLatest 将它们转换为它们的基本类型(TableCell),我失去了所有多态优势。有没有办法强制缓存将这些对象保存为它们的派生类型?
谢谢!
windows-phone - Reactive Extensions、Akavache 和 Refit 对于 Windows Phone 的内部卡来说太多了
我想在我的应用程序和akavache/Akavache中使用paulcbetts/refit。
问题是根据我的逻辑,Windows Phone 不喜欢我执行以下操作:
我得到学期(从缓存中,然后获取),选择想要的学期(我将 H2014 用于测试),获取所选(许多)学期的时间表(从缓存中,然后获取,如下所示:
如果我使用 5 或更多的 TimeSpan.FromSeconds,它会做我想做的事,就好像我给了 Windows Phone 喘息的时间。否则(5岁以下),我得到的例外情况如下:
抛出异常:mscorlib.ni.dll StackTrace 中的“System.NotSupportedException”:
想要的行为:
- 获取缓存学期 -> 获取该学期的缓存计划,获取该学期的计划
- 获取学期 -> 获取该学期的缓存计划,获取该学期的计划
我试过了:
- 在没有 Refit 的情况下链接akavache/Akavache并且它可以工作。
- 在没有akavache/Akavache的情况下链接 GetSchedule 和 GetSemesters 的选择,它可以工作。
如果你们对工作有想法或我做错了什么,请告诉我!
c# - 使用 TestScheduler 对 Akavache 的缓存行为进行单元测试
所以我正在尝试在使用 Akavache 的应用程序中测试缓存行为。我的测试如下所示:
SomeApiWrapper
使用内部 api(用模拟new Mock<ISomeApi>()
) - 为简单起见 - 只返回一个字符串。现在的问题是第二个字符串永远不会返回。处理缓存的SomeApiWrapper
类如下所示:
调试只会把我引向这条线return await cachedStrings.FirstOrDefaultAsync();
——之后它就永远不会结束。
当我用TestScheduler
标准 ( CurrentThreadScheduler.Instance
) 和scheduler.AdvanceToMs(5000)
with替换 时await Task.Delay(5000)
,一切都按预期工作,但我不希望单元测试运行多秒钟。
一个类似的测试,其中TestScheduler
超过缓存超时也成功。只是这种情况,缓存条目不应该在两个方法调用之间过期。
我使用的方式有什么问题TestScheduler
吗?
xamarin.forms - 无法让 Akavache 使用 PCL Xamarin Forms 应用程序工作
我已经为此苦苦挣扎了 4 个小时,现在我正在转圈。我正试图让 Akavache 为我的项目运行。该项目是开箱即用的 Xamarin Forms (Portable) 类型。然后使用 Nuget,我添加了 Akavache 4.1.2(还添加了 Akavache Core 和 SqlLite3 以及 ReactiveUI 和 Splat)。然后我更新了 Splat,因为 nuget 包中的依赖项是错误的(是 1.3.3 但应该是 1.6.0)。但是,在添加您应该针对此应用程序的第一行(BlobCache.ApplicationName = "MyApp")时,我仍然在启动此应用程序时遇到错误(目前针对 iOS):
PS 使用 Xamarin 4.1.0 运行 VS 2015 社区
xamarin - Akavache BlobCache.Secure 在 Android 上为空
我正在尝试使用 Akavache 将数据安全地存储在我的 Xamarin.iOS 和 Xamarin.Android 项目中。在 iOS 上一切似乎都很好,但在 Android 上却失败了,说BlobCache.Secure
为空。
在访问缓存之前,我将其设置为:
我试过直接引用它:(BlobCache.Secure
)Secure null
或使用我的 IoC 设置它
但最终的结果是一样的。Android 上 BlobCache 上唯一可用的缓存是 InMemoryCache。
caching - Akavache 总是调用 fetchFunc
我在 Xamarin 应用程序中使用 Akavache 有以下代码,但它的行为不像我认为的那样。可能是我对它应该是怎样的误解,但这让我发疯。
因此,在我的视图模型中,我正在调用 FetchNewsCategories 并为该项目指定 5 分钟的缓存。我期望发生的是,如果缓存项不存在,它将调用 fetchFunc(即 FetchNewsCategoriesAsync),但如果我在 5 分钟的缓存超时内多次调用该服务,它应该只给我缓存的项目而不是服务器调用。在我尝试过的所有情况下,它都会继续进行其余调用,并且永远不会给我缓存的项目。我也用 GetAndFetchLatest 试过这个,如果有一个缓存的项目,它不会进行其余的调用,但它也不会在视图模型的订阅事件中进行调用。有什么想法我在这里做错了吗?
编辑:我在 Android (Nexus 5 KitKat API19) 上测试了相同的代码,它运行完美。我要重置我的 IOS 模拟器,看看是不是出了问题。
新闻服务.cs
NewsViewModel.cs