问题标签 [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.
c# - Akavache 无效
我想像这样从 akavache 中删除对象
但是编译器给了我错误警告“类型'Unit'是在未引用的程序集中定义的。您必须添加对程序集'System.Reactive.Core,Version = 2.2.5.0,Culture = Neutral,PublicKeyToken = 31bf3856ad364e35'" 这让我无法编译它
我不知道如何解决这个问题。我已经在尝试 akavache 5.0.0 和 akavache 4.1.2。我正在尝试搜索 System.Reactive.Core 并且 nuget 中的最低版本是 3.0.0
c# - 使用 Akavache 从本地存储中删除记录
我有一条记录在本地存储在设备上,我有一个按钮可以从本地存储中删除记录。当用户按下按钮时,会调用此方法并从本地设备中删除记录(通过使 guid 无效)。我正在使用 Akavache 来保存数据。
虽然这在大多数情况下都有效,但我注意到有时当我删除记录并刷新视图时,记录会从集合中删除。但是,如果注销并重新登录应用程序,记录会重新出现。
我想知道这是否是在本地存储和删除记录的正确方法?
编辑:这是我登录应用程序时检索记录的方式:
asynchronous - Xamarin.Forms - 具有异步 OnCreate 方法的 Android 活动
FormsAppCompatActivity.OnCreate(Bundle bundle)
如果标记为异步有问题,我会遇到问题?我必须从 AWS DynamoDB 获取特定于用户的数据,并且我需要先从 Akavache 缓存中检索用户才能使用 userId 进行查询。当然,我也可以将 userId 保存到本地设置或序列化整个用户对象以便能够同步检索它。
我也不希望在启动期间出现性能问题,因为缓存使用 SQLite 肯定存在。唯一的问题是,要么我等待 Akavache GetObject<T>(string key)
,因此将所有内容标记OnCreate
为异步,要么订阅返回的 Observable,以下方法将尝试在没有有效 userId 的情况下查询用户数据,因为 Observable 尚未返回.
c# - 如何确保任务、Observables 和方法调用的混合都在同一个线程上执行
我的情况是,我需要在同一线程上发生特定的操作序列,但这些操作是任务、可观察对象以及各种随机代码和方法调用(包括 try/catch)的混合。踢球者是这一切都需要在同一个线程上执行。例如...你能通过重写 ExampleSequence 方法来解决这个问题吗?:
编辑:根本问题是什么(您可能想知道)?我对可以更改的现有代码有一些限制,现在在处理 SQlite 数据库时,一旦我尝试将操作包装在事务中,第二个数据库操作就会失败(它永远不会返回)。我的假设是这是一个线程锁定问题,因为 SQlite 有非常基本的方法来锁定数据库以进行事务......
EDIT2:根据@Nksoi 在评论中的链接,https: //stackoverflow.com/a/24195827/1735721,我尝试使用 AsyncLock。这并没有解决问题,但我发现这是第一个等待的 Observable,最终永远等待。因此,在上面的示例中,它将是这一行:
是否应该将某些内容传递给 Reactive Extension observable 或 ToTask 扩展方法以提高线程一致性?此外,现在认为可能是 Akavache 库 ( https://github.com/akavache/Akavache ) 中的某些东西导致了问题。Akavache 正在制作 observables。我会再做一些调试...
ios - Xamarin.iOS / Akavache - 使用自定义 EncryptionProvider 的加密缓存
我有一个 Xamarin.iOS 应用程序,它使用 Akavache 缓存数据并减少对服务器的不必要数据请求的数量。一切都按预期工作BlobCache.LocalMachine
,喜欢它。
现在我想确保静态数据是加密的。通过研究这个和在线阅读文档,我看到默认实现实际上并没有加密 iOS 上的缓存,我实际上需要提供IEncryptionProvider
.
我关注了这篇文章: http: //kent-boogaart.com/blog/password-protected-encryption-provider-for-akavache
从该线程添加了输入:https ://github.com/akavache/Akavache/issues/190
最终得到了这个实现:
我像这样注册这个实现:
Locator.CurrentMutable.RegisterConstant(new MyEncryptionProvider(), typeof(IEncryptionProvider));
在调用之前BlobCache.Secure
当我在该安全缓存上使用时,我看到EncryptBlock
并被DecryptBlock
调用。.GetOrFetchObject
到目前为止,一切都很好。
我遇到的问题是,尝试反序列化时出现以下错误时失败Newtonsoft
:
当使用BlobCache.LocalMachine
相同的数据结构缓存相同的对象时,成功存储如下:
我在这里想念什么?非常沮丧,真的希望有人看到我没有看到的东西。谢谢你的帮助。
ios - Xamarin.iOS / Akavache / Encrypted Cache Working Example
Does anyone have and is willing to share a working example of using Akavache
in a Xamarin.iOS
project (ideally without any other add on ui frameworks, as bare bones as possible) implementing a custom EncryptionProvider
so that the Secure cache is actually encrypted.
To clarify, I would like the example to show the following:
- use of
Xamarin.iOS
to build a simple iOS app - use of
Akavache
to cache data - use of
Akavache
'sBlobCache.Secure
orSQLiteEncryptedBlobCache
with a custom EncryptionProvider implementation to keep the cached data encrypted when data is at rest
Thanks for your help.
Conclusion:
With the help of the example below I got my test solution working and am sharing it here for anyone that it might help in the future: https://github.com/dmitrysamuylov/xamarin-ios-akavache-secure-example
c# - 异步等待调用不返回
我有一个问题,我调用了一个异步方法,并且调用没有返回。我认为它是线程竞赛。我该如何正确地写这个?
这是它开始的地方。我首先调用一个名为“GetCachedValuesAsync”的异步方法
这是 GetCachedValueAsync 的方法签名
我没有收到从 BlobCache 返回的调用,BlobCahce 方法是名为 akavache 的库的一部分。
代码也没有命中:ClipRefernce = GenerateRefernce(clips);
我感谢您的帮助
编辑 1
这是 GenerateReference 方法。
android - 与 Akavache Xamarin 的跨应用程序密钥共享
我已经实现了 Akavache 以与我的 Xamarin.Android 应用程序一起使用。密钥的保存和检索工作正常。我想在我的两个应用程序上实现单点登录体验。我想知道是否有一种方法可以将我的一个应用程序保存的密钥共享到另一个应用程序。
我用于密钥保存和检索的一些代码。
我尝试通过保持BlobCache.ApplicationName
一致在另一个应用程序中实现相同的代码,但这似乎不起作用并且没有检索任何值。
任何帮助表示赞赏。
xamarin.forms - 在 OnStart 方法中调用时,Akavache 或 Sqlite 崩溃
当我在我的 xamarin.forms 项目中使用下面的代码来检查 akavache 缓存中是否存在 User 对象时,我得到了下面的异常。相同的代码或任何 akavache 查询在其他地方工作,但仅在 onStart 方法中崩溃。我相信我已经在构造函数中初始化了 akavache。我使用移动中心尝试了完全相同的代码来查询本地(本地 sqlite)用户数据,我得到了同样的异常。我认为这应该与 sqlite 有关,因为 akavache 和 mobile center 都使用类似的 sqlite 库。有谁知道为什么它在 OnStart 方法中不起作用?
11-13 02:08:14.761 E/MobileCenterCrashes(6308):未处理的异常:11-13 02:08:14.761 E/MobileCenterCrashes(6308):System.NullReferenceException:对象引用未设置为对象的实例。11-13 02:08:14.761 E/MobileCenterCrashes(6308):在 Xamarin.Forms.Platform.Android.AppCompat.Platform.LayoutRootPage(Xamarin.Forms.Page 页面,System.Int32 宽度,System.Int32 高度)[0x0000c]在 D:\agent_work\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:291 11-13 02:08:14.761 E/MobileCenterCrashes(6308): 在 Xamarin.Forms.Platform.Android.AppCompat .Platform.Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout(System.Boolean 已更改,System.Int32 l,System.Int32 t,System.Int32 r,System.Int32 b)[0x00003] 在 D:\agent_work\1 \s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:199 11-13 02:08:14。
编辑:这个问题肯定是由 akavache 引起的。消息真的很奇怪。看起来 akavache 与 LayoutRootPage 有一些关系。
请参阅上面的代码,我从 akavache 缓存中获取用户对象,并且用户对象定义我是否应该显示登录页面或主页。如果我将ShowMainPageOrLoginPage();
函数移到 akavache 调用之上,它就可以正常工作。因此,您似乎无法在 rootlayoutpage 之前使用 akavache 进行任何查询 - 设置或加载主页。
sqlite - Xamarin.Forms / Xamarin iOS 中 Akavache 中可能存在的错误
Akavache 的实现适用于 Android 调试和发布以及 iOS 调试模式。但是,它在 iOS 发布模式下崩溃。
从 Raygun 截获的引发的异常是“Akavache.Sqlite3.Internal.SQLiteConnection”的类型初始化程序引发了异常。
只需部署 iOS 发布模式并获得异常提示。感谢遇到类似问题的人是否可以提供帮助。
Akavache 版本是 6.0.0-alpha0038。
完整的堆栈跟踪如下:
Akavache.Sqlite3.SQLitePersistentBlobCache..ctor(System.String databaseFile, System.Reactive.Concurrency.IScheduler scheduler) in :0 Akavache.Sqlite3.Registrations+<>c__DisplayClass0_0.b__2() in :0
Akavache.Sqlite3.Registrations+<>c__DisplayClass0_0.b__3() in :0 Splat.ModernDependencyResolver.GetService(System.Type serviceType, System.String contract) in <412cf7afb8e84872aee33a6b0acc7f20#a572ceb4cff14caae1629fe17a67dfc3>:0 Splat.DependencyResolver.SplatMixins.( IDependencyResolver This, System.String contract) in <412cf7afb8e84872aee33a6b0acc7f20#a572ceb4cff14caae1629fe17a67dfc3>:0 Akavache.BlobCache.get_UserAccount() in <6b3110b6f37348ddb9bd9456cdb85f61#a572ceb4cff14caae1629fe17a67dfc3>:0 XXX.UI.CompositionRoot.CreateBlobCache() in <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0
XXX.UI.CompositionRoot.CreateApp() in <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0 XXX.UI.CompositionRoot.LoggedCreation[T](System.Func`1[TResult] factory) in <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0 XXX.UI. CompositionRoot.CreateApp() 在 <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0
<2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3> 中的 XXX.UI.CompositionRoot.ResolveApp():0 XXX.UI.iOS.AppDelegate.ResolveApplication(XXX.UI.CompositionRoot compositionRoot) in :0 XXX.UI.iOS.AppDelegate.Finished.Launching( app, Foundation.NSDictionary options) in :0 UIKit.UIApplication.Main(System.String[] args, System.IntPtr principal, System.IntPtr delegate) in :0 UIKit.UIApplication.Main(System.String[] args, System .String principalClassName, System.String delegateClassName) in :0 XXX.UI.iOS.Application.Main(System.String[] args) in :0