问题标签 [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 回答
1228 浏览

c# - 在 Windows Phone 项目中使用 Akavache 的 LoadImageFromUrl 的正确方法是什么?

目标是从 url 异步获取图像,然后将其设置为BitmapSourceviewmodel 属性(数据绑定在视图中)。

我可以LoadImageFromUrl用来获取 a Splat.IBitmap,但我不知道如何将它连接到 a BitmapSource。事实上,我不确定我是否正确使用了这种方法。

这是我所拥有的:

我想到的其他事情:

  • 检查文档:似乎没有我能找到的
  • 谷歌周围:选择很少,没有直接帮助
  • 看看这个方法是如何在Akavanche 测试中使用的:它似乎没有在任何地方被调用
  • 由于Splat返回了 -namespace 对象,请检查 Splat 测试/文档:更接近。splat 自述文件说:

.

太好了,除了ToNative()在这种情况下没有意义,因为它不是Splat.IBitmapinterface的成员。

现在我没有主意了。

0 投票
3 回答
734 浏览

android - Akavache 没有这样的表:SchemaInfo

我正在尝试将 Akavache 与 Xamarin 一起使用。我已将 NuGet 中的 Akavache 包安装到 Android 和 Windows Phone 项目。

初始化:

第三行引发错误(在 Android 和 Windows Phone 目标上):

我究竟做错了什么?

提前致谢 :)

0 投票
3 回答
387 浏览

c# - ReactiveList.AddRange 不适用于大型集合

我有一个简单的 TableView,它显示从网络下载的字符串列表。该列表非常大(约 140k 字符串)。使用 AddRange 并没有发生任何事情,但是如果我静态地编写一个小的 2 项列表,它工作正常。

视图模型中重新加载命令的代码:

但是,如果我将其更改为类似的内容,它实际上会将单元格添加到表格视图中:

我的猜测是我以一种非常低效的方式添加项目,它只是没有从 AddRange 调用返回。我对 Rx/ReactiveUI/MVVM/all-this-cool-linq-stuff 非常陌生,但前提非常棒。

对于它的价值 - 我正在尝试在 MonoTouch 上执行此操作。

0 投票
1 回答
1049 浏览

c# - 使用 Akavache 在列表视图适配器中显示图像

我正在使用 Xamarin 开发跨平台应用程序。我找到了 Akavache,但我无法在 listview 适配器中使用 Akavache 处理图像加载。它的工作速度非常慢。所以我需要修复它或找到另一种方法来处理这个问题。我也找不到一个好的例子或样本。

我正在尝试使用 getView 方法在 Listview 适配器中下载和加载图像,如下所示:

在我的 DataCache 类中,我尝试通过以下方式获取图像,滚动时 loadImageFromUrl 无法按预期工作,重新加载图像需要很长时间。GetAndFetchLatest 和 GetOrFetchObject 方法给出 InvalidCastException。异常消息在最后。你有任何类似的例子或任何建议来解决我的问题吗?

未处理的异常:12-11 12:48:54.560 I/MonoDroid(2017):System.InvalidCastException:无法从源类型转换为目标类型。12-11 12:48:54.560 I/MonoDroid(2017):在(包装器 castclass)对象:__castclass_with_cache(对象,intptr,intptr) 12-11 12:48:54.564 I/MonoDroid(2017):在 Akavache.JsonSerializationMixin+ c__AnonStorey11[System.Byte[]].<>m__0 (System.Exception _) [0x00000] in <filename unknown>:0 12-11 12:48:54.564 I/MonoDroid( 2017): at System.Reactive.Linq.ObservableImpl.Catch2+_[System.Byte[],System.Exception].OnError (System.Exception 错误) [0x00000] in :0 12-11 12:48:54.572 I/MonoDroid(2017): --- 堆栈跟踪结束从先前引发异常的位置 --- 12-11 12:48:54.572 I/MonoDroid(2017): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x00000] in :0 12-11 12:48: 54.580 I/MonoDroid(2017):在 System.Reactive.PlatformServices.ExceptionServicesImpl.Rethrow(System.Exception 异常)[0x00000] 在:0 12-11 12:48:54.580 I/MonoDroid(2017):在 System.Reactive。 ExceptionHelpers.ThrowIfNotNull(System.Exception 异常)[0x00000] 在:0 12-11 12:48:54.580 I/MonoDroid(2017):在 System.Reactive.Subjects.AsyncSubject`1[Splat.IBitmap].GetResult () [ 0x00000] in :0 发生未处理的异常。

更新:保罗回答了我,所以现在我知道我不能将 GetOrFetchObject 与 IBitmaps 一起使用,因为它们是 UI 元素。所以现在不需要异常消息。但是 loadImageFromUrl 方法在滚动时会阻塞我的 UI 线程。所以这对我来说仍然是一个大问题。

0 投票
2 回答
932 浏览

c# - 如何忽略使用 Akavache 缓存的不可序列化属性?

我有一个要使用 Akavache 缓存的自定义类。此类包含一个不可序列化的属性(它是 ParseFile 对象)。当我尝试使用 GetAndFetchLatest 缓存/获取此自定义类的列表时,它不起作用。我认为这可能是由一个不可序列化的属性引起的。尝试了 JsonIgnore 属性,但没有帮助。

问题是,我如何告诉 Akavache 缓存自定义类列表中的所有内容,但不可序列化的属性除外?自定义类的示例在这里,我希望它忽略 Photo 属性:

0 投票
3 回答
3824 浏览

android - Akavache 不会在应用程序重新启动之间保留缓存数据

我有一个 Xamarin Android 项目,使用共享 PCL 库,我决定使用 Akavache 作为临时数据存储(存储一些简单的登录状态信息,以节省每次重新登录)。

因此,我将 Akavache 和 Akavache.Sqlite3 nuget 包添加到共享库(以及 Xamarin.Android 项目)。我设置了BlobCache.ApplicationName, 甚至调用了EnsureInitialized(这似乎并没有比记录一条消息更多)。

我将应用程序部署到设备上。手动启动它(因此不会擦除数据和首选项等)。只要应用程序正在运行,数据就会被缓存(和检索)。如果缺少键,它会抛出异常(如预期的那样)。一切都完美无缺。

然后我关闭了应用程序(在某个阶段我什至重新启动了手机)。当我重新启动它时,缓存要么是空的,要么是重新初始化的。无论哪种方式,我缓存的所有内容都消失了。

我在调试器中查看了缓存 sqlite3 文件的存储位置,应用程序告诉我它们显然位于data/data/packagename/cache/xyzblobs.db. 我看不到这些文件,因为它们位于内部系统缓存/应用程序文件目录中,所以我不知道它们是否被擦除。

我已经打开了 WRITE_EXTERNAL_STORAGE(和 READ_)权限。没有骰子。我试过使用Secure,UserAccountLocalMachine目标。纳达。它们都不起作用。

只要应用程序正在运行(或在内存中),它就会按预期运行。应用程序消失的那一刻,缓存也消失了。

我唯一没有做的是调用BlobStorage.Shutdown()方法。那是因为我不知道在哪里称呼它。我有多项活动,不想因为愚蠢而成为引用计数。

编辑:后来我强迫打电话.Shutdown().Wait(),这似乎也没有帮助。

有没有其他人经历过这个?我知道至少还有一个人遇到了完全相同的问题,详细信息请参见Xamarin 论坛

我真的不想把所有的 Akavache 东西都拿出来,因为我以前用过它,在非 Xamarin-Android 的其他地方,它很棒。否则我将不得不开始查看某种 xplat 共享首选项管理器,我不想这样做,因为 Akavache 应该这样做。

编辑:这是一些代码:

初始化(我有一个静态共享的“AppGlobal”类,我用它来保存单例类型的东西)

一切正常,如果我在调试器中启动它并查看BlobCache它告诉我我正在使用 Sqlite3 存储和它的路径(尽管我无法在非 root 用户上访问 sqlite3 .db 文件设备)

我可以使用类似的东西调用缓存获取/设置

currentCookie = await BlobCache.LocalMachine.GetObject<Cookie>("authCookie"); 并将它们写回

await BlobCache.LocalMachine.InsertObject("authCookie", cookie);

所有 Akavache 调用都在共享库中进行。我使用哪个存储(Secure、UserAccount 或 LocalMachine)并不重要,行为是相同的。

一切都完美无缺。然后我退出应用程序。重新打开应用程序(我可以重新启动手机以确保它消失了),缓存为空。或者重置。或者重新制作。我不知道是哪个,因为我看不到 .db 文件。

我不是在调试器下运行并每次都重新部署。所以部署目录不会被破坏。即使我安装了 apk,也会发生这种情况。我认为这可能与那些 db 文件不在它所说的位置有关,但我完全不知所措。

我是否需要在特定于平台的级别实现某些东西并将其传递给共享库?我不这么认为,因为所有依赖项和路径似乎都已解决。

我在这上面浪费了几个小时。

谢谢 :)

0 投票
3 回答
612 浏览

.net - 如何在 LINQPad 中使用 Akavache?

根据Akavache的平台特定说明:

.NET 4.5 桌面 (WPF) - 您必须将应用程序标记为 x86,否则您将收到关于 SQLitePCL_Raw 未正确加载的奇怪运行时错误。

现在,我只是尝试使用仿照 Akavache Github 页面上的示例代码建模的简单代码在LINQPad中测试 Akavache。

可以预见的是,它正在爆炸。

如何在 LINQPad 中将我的应用程序构建目标标记为 x86?使用 v. 4.53.16,而不是 AnyCPU 版本,只是普通的 beta。我在设置和谷歌中到处找,但找不到任何东西。

谢谢

* 更新 1 *

尝试@Joe Albahari 的建议。 IntPtr.Size确实是4。这是我在第一await行得到的例外:

由于我通过 LINQPad 的 NuGet 安装了 Akavache,因此我不得不进行一些搜索以找出 sqlite3.dll 的位置。我在 Akavache NuGet 包中(在我的 AppData/Local/LINQPad/Nuget... 中)发现了大约 15 个不同的 slqlite3.dll,用于各种构建。我尝试先将 x86 文件夹中的那个复制到 LINQPad 目录,但同样的错误。然后我尝试将其他每个 sqlite3.dll 复制到 LINQPad 文件夹,但结果仍然相同。

我无法在这台机器上安装 Visual Studio,所以我希望有办法让它与 LINQPad 一起工作。

0 投票
2 回答
1984 浏览

akavache - 如何清除 Akavache 数据库?

我正在使用 Akavache 缓存本地对象。我希望能够删除数据库中的所有内容(就好像它是第一次运行程序一样)。我见过 Vacuum 方法,但这只会删除过期的旧项目。清理所有东西的简单方法是什么?

0 投票
1 回答
1659 浏览

c# - 在 Xamarin.Android 中使用位图的 OutOfMemoryException

当我尝试下载图像(可能是大图像)时,我遇到了 OutOfMemoryException。我正在使用 Xamarin.Android 和 PCL 进行跨平台操作。

我想做一个图像幻灯片。我的布局上叠加了有限数量的图像视图。当我刷出所有图像时,我会在这些图像视图中重新加载新图像。我做了一个简单的项目,只有机制中令人耳目一新的部分。

拜托,很好,我是 Android 和 Xamarin 的初学者,这里是代码:

MainActivity.cs:

ImageDownloadService.cs(在 PCL 中):

当第一次单击该按钮时,它会下载图像(即使我发现 DDMS 中的内存使用率有点高)。

但是对于下一次点击,监视内存使用情况,它会像地狱一样增加。

我在想,当我在那个 imageView 中设置一个新图像时,内存中的以前的位图没有被处理,这是某处的强引用,但如果是这样,我无法找到它在哪里。

我将感谢您对这个问题的帮助或任何调试内存使用的技术,例如跟踪对象的创建位置和销毁位置。

感谢您花时间阅读这篇文章,希望您能帮助我。

0 投票
1 回答
1704 浏览

c# - 从 Akavache 存储中获取对象时出现 Newtonsoft.Json.JsonSerializationException

将对象实例放入 Akavache 存储时,一切正常。但是当试图从存储中获取它时,我收到以下错误消息:

我之前使用以下反序列化器从远程服务获取 JSON 后反序列化该对象:

在类T中,我使用了一些自定义JsonConverter并通过使用设置属性名称JsonProperty- 全部由注释完成。DateTime 对象也在这里(如果有话要说的话..)

我无法理解,我在这里做错了什么 - 我没有在网上找到任何东西。稍后你可以看到OfflineTrackCollection我试图到达这里的对象。我尝试过的是,如果我删除该Track列表或将其留空,它会起作用。所以它与跟踪对象有关(您可以在下面找到对象)。你有什么想法,或者你之前有过这个问题吗?

这是类和一些对象。如果您想查看更多代码,请联系我。转换器没有被调用(至少调试器没有停在那里)。

编辑添加了 JsonConverter 和我在调用时得到的数据BitConverter.ToString(await BlobCache.LocalMachine.Get("track_collection_1"))

我真的不知道 Akavache 如何进行序列化以将对象存储在 SQL 文件中的详细信息……但它要么不将其存储在此处,要么在将其发送到JsonSerialization