问题标签 [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.

0 投票
1 回答
272 浏览

c# - 这种模式是否可以通过 Akavache 在 ViewModel 中加载和缓存数据并将它们绑定到 Xamarin.Forms 中的 UI?

我试图找到一些“最佳实践”示例,如何在现实场景中使用 Xamarin.Forms、ReactiveUI 和 Akavache。假设有一个代表客户详细信息的简单页面。它应该在激活(导航到)时从服务器检索数据。我喜欢 Akavache 的 GetAndFetchLatest 扩展方法的想法,所以我想使用它。

我最终得到了这样的结果:

DTO

查看绑定

但我认为这不是 100% 防弹的。这有一些可能的问题:

  1. 当我想在激活时加载数据时可以调用视图this.ViewModel?.GetDataCommand.Execute().Subscribe();吗?this.WhenActivated(d => ...)
  2. 绑定到CustomerDetail.Description会导致NullReferenceException我是对的吗?或者它安全吗?
  3. 我想做一些类似的事情:“如果有CustomerDetail,显示CustomerDetail.Name。当它还没有加载时,显示Customer.Name”。因为它,我需要在 ViewModel 上创建特定的属性吗?
  4. 如何指示加载?
  5. 我在这里错过了一些重要的事情吗?我还有其他一些问题吗?
0 投票
1 回答
202 浏览

serialization - Akavache 不存储/返回 NodaTime LocalDateTime

我需要将 NodaTime LocalDateTime 存储在 Akavache 缓存中。

我创建了一个简单的应用程序,它采用以下类并将其存储/从 Akavache 缓存中检索:

当它存储在缓存中并从缓存中检索时,尚未填充StartDateTimeLocal属性。

Akavache 似乎不知道如何序列化/反序列化 LocalDateTime。

是否可以向 Akavache 注册类型或为未知类型提供自定义序列化?

控制台应用程序来演示它:

测试模型类:

我在演示问题的控制台应用程序中添加了带有上述内容的Git 存储库。

0 投票
1 回答
73 浏览

xamarin.forms - 夏令时没有坚持

如果我将夏令时日期放入缓存中,那么它会在没有应用夏令时的情况下出现。

例如 14:00+1 (15:00) 从缓存中返回为 14:00。

在非夏季时间,没有问题。

我在 GitHub 上提出了一个问题,一周内没有答案。

有任何想法吗?

0 投票
2 回答
141 浏览

c# - 从 Akavache 获取 JSON 字符串

我的 Xamarin 应用程序有一些带有 Akavache 的缓存对象。出于测试目的,我试图以原始 JSON 字符串格式获取缓存数据。我尝试了以下方法,但得到了一个奇怪的字符串:

Debug.WriteLine 只会打印一个问号,但检查值我可以看到部分 JSON:

0 投票
0 回答
146 浏览

sqlite - 在 Xamarin Forms 项目中使用 Akavache 数据库

使用 Visual Studio 2019 Xamarin Forms 4.2 .Net Standard 2.0 框架

我正在开发一个 Xamarin Forms 项目,在该项目中我使用 Akavache 对数据进行一些缓存,效果很好,但我也想使用 Akavache 创建的同一个数据库将一些数据保存到我自己的表中。有人可以指导我一些可以告诉我如何做到这一点的代码吗?我想要一个基于可以执行 CRUD 操作的类模型创建的表。

谢谢,凯

0 投票
0 回答
25 浏览

sqlite - 访问 Akavache DatabasePath 值

在我的项目中,我试图使用我的 Akavache 对象中的 DatabasePath 值。奇怪的是,我似乎只能在调试模式下查看和访问 DatabasePath 属性值。

我不明白我做错了什么。当项目未运行时,我似乎无法查看或访问 Akavache 对象中的 DatabasePath 属性,因此我可以将值分配给代码中的变量。有人可以帮我解开这个谜吗?我希望我附上的图片是有意义的。

Akavache 数据库路径值

问候, 凯

0 投票
1 回答
418 浏览

listview - Xamarin.Form 问题(如果从 Akavache 缓存绑定,ListView 不会刷新)

我遇到了刷新列表的问题。

MasterDetailPage在 Visual Studio 2019 (Xamarin.Forms 4.3.0.991250) 和 Akavache 6.6.1 中使用 init default,变量是 Items of type ObservableCollection<TodoItem>

首先,我将一个项目添加到缓存中(我称这个对象为 TodoItem)。然后显示 ListView 与从 Akavache 缓存获取的 Items 绑定,但它不起作用,Items 有值 ->ListView不刷新。

我尝试了一些东西:

  • 更改版本(Xamarin.Forms 和 Akavache),例如:XF 4.1 最高版本和 akavache 降级 6.0、6.1、6.2... => 不工作。

  • 如果使用硬编码 new ObservableCollection(new ListView(){ ... }) => 设置项目,它正在工作。

  • 如果应用程序正在运行,我会更改布局上的某些内容并保存(Xaml 热重载)-> 它正在工作。

    公共 ObservableCollection 项目 { 获取;放; } = 新的 ObservableCollection();

    /li>
0 投票
1 回答
101 浏览

prism - Akavache 初始化并在 Prism 中为 DI 注册一个常量

我正在使用 Akavache 并想注册常量 BlobCache.LocalMachine ,这样当我在我的视图模型的构造函数中注入 IBlobCache 时,它​​只会将其拾取。

我相信 Ninject 等价物是:

我想做的事:

最后,当我“注销”我的应用程序时,我看到了相互矛盾的信息。是正确的顺序:

或者

0 投票
1 回答
86 浏览

xamarin.forms - 之前使用 Akavache 时未正确显示第一个视图

如果我在显示我的第一个视图之前从缓存中获取一个对象,那么应用程序将只显示一个空白页(在 Android 上,没有测试其他平台)。如果我锁定屏幕并解锁它,那么我的视图就会显示出来。重现非常简单:

  • 创建新的 Xamarin.Forms 应用(我为此示例选择了选项卡式布局)。
  • 将 akavache nuget 包添加到所有项目。
  • App.xaml.cs,在设置属性之前初始化akavache并获取一个对象MainPage
  • 启动应用程序 - 将是完全白屏。
  • 锁屏,解锁-界面将显示。这部分似乎只适用于我的实体手机,而不是模拟器。

App.xaml.cs这是一个将重现该问题的示例。

那么这里发生了什么,更重要的是 - 是否有解决方案或解决方法?

0 投票
0 回答
91 浏览

c# - 使用 Akavache 在 Xamarin.iOS 中读取缓存失败

在一个跨平台项目中,我们使用 Akavache 作为我们的缓存。目标是 .Net Standard 2.1,我们使用 6.10.20 版本。

我们只需使用以下内容进行编写:

await cache.InsertObject(userIDKey, userID);

阅读: await cache.GetObject<Guid>(userIDKey);

它适用于Xamarin.Android,用于阅读和写作。

不幸的是,我们只能Xamarin.iOS中写入(缓存确实包含该项目)。

当我们尝试读取它时,会出现以下异常:

此平台不支持操作。

Stacktrace:在 System.Reflection.Emit.DynamicMethod..ctor(System.String 名称,System.Reflection.MethodAttributes 属性,System.Reflection.CallingConventions callingConvention,System.Type returnType,System.Type[] parameterTypes,System.Type 所有者, System.Boolean skipVisibility) [0x00006] 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/mcs/class/corlib/System.Reflection.Emit/DynamicMethod.notsupported.cs:74 \ n 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.ILEmitResolverBuilder.BuildTypeNoCache (Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite callSite) [0x00038] 在 :0 \n 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.ILEmitResolverBuilder.BuildType (Microsoft.Extensions. DependencyInjection.ServiceLookup.ServiceCallSite callSite) [0x00055] in :0 \n 在 Microsoft。Extensions.DependencyInjection.ServiceLookup.ILEmitResolverBuilder.Build (Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite callSite) [0x00039] 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CompiledServiceProviderEngine.RealizeService (Microsoft.Extensions.DependencyInjection.ServiceLookup. ServiceCallSite callSite) [0x00006] in :0 \n 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>n__0 (Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceCallSite callSite) [0x00000] in :0 \n 在 Microsoft.Extensions。 DependencyInjection.ServiceLookup.DynamicServiceProviderEngine+<>c__DisplayClass1_0.b__1 () [0x00000] in :0 \n 在 System.Threading.Tasks.Task`1[TResult].InnerInvoke () [0x0000f] 在 /Library/Frameworks/Xamarin.iOS。framework/Versions/Current/src/Xamarin.iOS/external/corert/src/System.Private.CoreLib/src/System/Threading/Tasks/Future.cs:534 \n 在 System.Threading.Tasks.Task.Execute ( ) [0x00000] 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/external/corert/src/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs:第2319章

我们使用以下环境:

  • 操作系统:iOS 13.5
  • 设备:模拟器 11.5
  • Xamarin:16.6.000.1062 (d16-6@41e1f0e)
  • Xamarin.iOS 和 Xamarin.Mac SDK 13.18.2.1 (29c4ea7)

很奇怪,编写工作但同一个对象无法检索数据。

什么可能导致这种情况?