问题标签 [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# - 在 Windows Phone 项目中使用 Akavache 的 LoadImageFromUrl 的正确方法是什么?
目标是从 url 异步获取图像,然后将其设置为BitmapSource
viewmodel 属性(数据绑定在视图中)。
我可以LoadImageFromUrl
用来获取 a Splat.IBitmap
,但我不知道如何将它连接到 a BitmapSource
。事实上,我不确定我是否正确使用了这种方法。
这是我所拥有的:
我想到的其他事情:
- 检查文档:似乎没有我能找到的
- 谷歌周围:选择很少,没有直接帮助
- 看看这个方法是如何在Akavanche 测试中使用的:它似乎没有在任何地方被调用
- 由于
Splat
返回了 -namespace 对象,请检查 Splat 测试/文档:更接近。splat 自述文件说:
.
太好了,除了ToNative()
在这种情况下没有意义,因为它不是Splat.IBitmap
interface的成员。
现在我没有主意了。
android - Akavache 没有这样的表:SchemaInfo
我正在尝试将 Akavache 与 Xamarin 一起使用。我已将 NuGet 中的 Akavache 包安装到 Android 和 Windows Phone 项目。
初始化:
第三行引发错误(在 Android 和 Windows Phone 目标上):
我究竟做错了什么?
提前致谢 :)
c# - ReactiveList.AddRange 不适用于大型集合
我有一个简单的 TableView,它显示从网络下载的字符串列表。该列表非常大(约 140k 字符串)。使用 AddRange 并没有发生任何事情,但是如果我静态地编写一个小的 2 项列表,它工作正常。
视图模型中重新加载命令的代码:
但是,如果我将其更改为类似的内容,它实际上会将单元格添加到表格视图中:
我的猜测是我以一种非常低效的方式添加项目,它只是没有从 AddRange 调用返回。我对 Rx/ReactiveUI/MVVM/all-this-cool-linq-stuff 非常陌生,但前提非常棒。
对于它的价值 - 我正在尝试在 MonoTouch 上执行此操作。
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__AnonStorey1
1[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.Catch
2+_[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 线程。所以这对我来说仍然是一个大问题。
c# - 如何忽略使用 Akavache 缓存的不可序列化属性?
我有一个要使用 Akavache 缓存的自定义类。此类包含一个不可序列化的属性(它是 ParseFile 对象)。当我尝试使用 GetAndFetchLatest 缓存/获取此自定义类的列表时,它不起作用。我认为这可能是由一个不可序列化的属性引起的。尝试了 JsonIgnore 属性,但没有帮助。
问题是,我如何告诉 Akavache 缓存自定义类列表中的所有内容,但不可序列化的属性除外?自定义类的示例在这里,我希望它忽略 Photo 属性:
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
,UserAccount
和LocalMachine
目标。纳达。它们都不起作用。
只要应用程序正在运行(或在内存中),它就会按预期运行。应用程序消失的那一刻,缓存也消失了。
我唯一没有做的是调用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 文件不在它所说的位置有关,但我完全不知所措。
我是否需要在特定于平台的级别实现某些东西并将其传递给共享库?我不这么认为,因为所有依赖项和路径似乎都已解决。
我在这上面浪费了几个小时。
谢谢 :)
.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 一起工作。
akavache - 如何清除 Akavache 数据库?
我正在使用 Akavache 缓存本地对象。我希望能够删除数据库中的所有内容(就好像它是第一次运行程序一样)。我见过 Vacuum 方法,但这只会删除过期的旧项目。清理所有东西的简单方法是什么?
c# - 在 Xamarin.Android 中使用位图的 OutOfMemoryException
当我尝试下载图像(可能是大图像)时,我遇到了 OutOfMemoryException。我正在使用 Xamarin.Android 和 PCL 进行跨平台操作。
我想做一个图像幻灯片。我的布局上叠加了有限数量的图像视图。当我刷出所有图像时,我会在这些图像视图中重新加载新图像。我做了一个简单的项目,只有机制中令人耳目一新的部分。
拜托,很好,我是 Android 和 Xamarin 的初学者,这里是代码:
MainActivity.cs:
ImageDownloadService.cs(在 PCL 中):
当第一次单击该按钮时,它会下载图像(即使我发现 DDMS 中的内存使用率有点高)。
但是对于下一次点击,监视内存使用情况,它会像地狱一样增加。
我在想,当我在那个 imageView 中设置一个新图像时,内存中的以前的位图没有被处理,这是某处的强引用,但如果是这样,我无法找到它在哪里。
我将感谢您对这个问题的帮助或任何调试内存使用的技术,例如跟踪对象的创建位置和销毁位置。
感谢您花时间阅读这篇文章,希望您能帮助我。
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