SQLiteException:未知错误(代码0):本机无法创建新字节[]

2024-01-04

当尝试查询最多 30 个对象时,我收到此错误,每个对象都有字段字节[]其权重为 100x100 ARGB_8888 位图数据~ 39kb

我使用的是 OrmLite 4.45 版本。在 Samsung GT n8000 平板电脑上(最大堆大小 64mb)

这是堆栈跟踪:

android.database.sqlite.SQLiteException: unknown error (code 0): Native could not create new byte[]
    at android.database.CursorWindow.nativeGetBlob(Native Method)
    at android.database.CursorWindow.getBlob(CursorWindow.java:403)
    at android.database.AbstractWindowedCursor.getBlob(AbstractWindowedCursor.java:45)
    at com.j256.ormlite.android.AndroidDatabaseResults.getBytes(AndroidDatabaseResults.java:161)
    at com.j256.ormlite.field.types.ByteArrayType.resultToSqlArg(ByteArrayType.java:41)
    at com.j256.ormlite.field.BaseFieldConverter.resultToJava(BaseFieldConverter.java:24)
    at com.j256.ormlite.field.FieldType.resultToJava(FieldType.java:798)
    at com.j256.ormlite.stmt.mapped.BaseMappedQuery.mapRow(BaseMappedQuery.java:60)
    at com.j256.ormlite.stmt.SelectIterator.getCurrent(SelectIterator.java:270)
    at com.j256.ormlite.stmt.SelectIterator.nextThrow(SelectIterator.java:161)
    at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:187)
    at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:263)
    at com.j256.ormlite.dao.EagerForeignCollection.(EagerForeignCollection.java:37)
    at com.j256.ormlite.field.FieldType.buildForeignCollection(FieldType.java:781)
    at com.j256.ormlite.stmt.mapped.BaseMappedQuery.mapRow(BaseMappedQuery.java:82)
    at com.j256.ormlite.android.AndroidDatabaseConnection.queryForOne(AndroidDatabaseConnection.java:186)
    at com.j256.ormlite.stmt.mapped.MappedQueryForId.execute(MappedQueryForId.java:38)
    at com.j256.ormlite.field.FieldType.assignField(FieldType.java:540)
    at com.j256.ormlite.stmt.mapped.BaseMappedQuery.mapRow(BaseMappedQuery.java:71)
    at com.j256.ormlite.stmt.SelectIterator.getCurrent(SelectIterator.java:270)
    at com.j256.ormlite.stmt.SelectIterator.nextThrow(SelectIterator.java:161)
    at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:187)
    at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:263)
    at com.j256.ormlite.stmt.QueryBuilder.query(QueryBuilder.java:319)
    at com.j256.ormlite.stmt.Where.query(Where.java:485)
    at com.j256.ormlite.dao.BaseDaoImpl.queryForEq(BaseDaoImpl.java:243)    

这是日志猫:

05-16 14:05:24.561: D/dalvikvm(4163): GC_CONCURRENT freed 1247K, 10% free 18046K/19911K, paused 11ms+3ms, total 30ms
05-16 14:05:24.561: D/dalvikvm(4163): WAIT_FOR_CONCURRENT_GC blocked 10ms
05-16 14:05:24.686: D/dalvikvm(4163): GC_CONCURRENT freed 119K, 4% free 19922K/20743K, paused 11ms+2ms, total 28ms
05-16 14:05:24.686: D/dalvikvm(4163): WAIT_FOR_CONCURRENT_GC blocked 15ms
... whole ton of these
05-16 14:05:27.261: D/dalvikvm(4163): GC_CONCURRENT freed 109K, 2% free 62754K/63495K, paused 12ms+5ms, total 36ms
05-16 14:05:27.261: D/dalvikvm(4163): WAIT_FOR_CONCURRENT_GC blocked 20ms
05-16 14:05:27.366: I/dalvikvm-heap(4163): Clamp target GC heap from 65.738MB to 64.000MB
  • 内存使用量增长如此之快正常吗?
  • 您如何看待将查询拆分为块并在这些单独的查询之间显式调用 System.gc() ?

Thanks!


内存使用量增长如此之快正常吗?

不,不是。

您如何看待将查询拆分为块并在这些单独的查询之间显式调用 System.gc() ?

不,这很可能无法解决问题。您需要直接解决底层内存问题。

查看您的代码和您在帖子中未提供的实体后,这不是ORMLite http://ormlite.com/问题而是一个实体问题。

你有一个Gallery of Photos。每张照片都有可能很大的字节图像数据数组——可能有 50+k。问题是Gallery有大量的外国收藏Photos:

@ForeignCollectionField(eager = true)
private ForeignCollection<Photo> photos;

然后每个Photo有其父级的自动刷新版本Gallery.

@DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = GALLERY)
private Gallery gallery;

这会设置一个急切的获取循环,导致 ORMLite 执行如下操作:

  1. 每当 ORMLite 尝试加载Gallery进入记忆...
  2. 它被要求进行另一个查询并加载与该相关的所有照片Gallery因为急于收集而进入内存。
  3. 对于每一个Photo实例中,它被要求执行另一个查询来获取关联的Gallery由于自动刷新父级而进入内存。
  4. 为此Gallery它被要求加载所有的Photo进入内存。
  5. ... ORMLite 实际上有一个逃逸,但仍然降低了 3 个级别。

ORMLite 没有神奇的观点Gallery and Photo实例,因此它附加父级Gallery到国外领域Photos。如果你想要这个那么我会看到ObjectCache解决方案如下。

有多种方法可以解决此问题:

  • 我会推荐not using foreignAutoRefresh = true。如果您需要Gallery的照片然后你可以通过这样做得到它galleryDao.refresh(photo.getGallery())。这打破了渴望获取的链条。
  • 您还可以使photos收藏not渴望。延迟加载的集合会更多地访问数据库,但也会打破循环。
  • If you really必须拥有所有渴望收集和刷新的内容,那么最好的解决方案是引入ObjectCache。您可能必须经常清除缓存,但每个 DAO 都会在缓存中查找并返回相同的对象实体,即使急切的获取循环正在进行。

    galleryDao = getHelper().getRuntimeExceptionDao(Gallery.class);
    galleryDao.setObjectCache(true);
    photoDao = getHelper().getRuntimeExceptionDao(Photo.class);
    photoDao.setObjectCache(true);
    ...
    // if you load a lot of objects into memory, you must clear the cache often
    galleryDao.clearObjectCache();
    photoDao.clearObjectCache();
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLiteException:未知错误(代码0):本机无法创建新字节[] 的相关文章

  • 使用 Eclipse 创建新的 android 项目后,Eclipse 中的 SRC 文件夹为空(未创建 MainActivity 类)

    使用 Eclipse 创建新的 android 项目后 Eclipse 中的 SRC 文件夹为空 未创建 MainActivity 类 我使用 Eclipse 创建了一个新的 android 项目 但我在项目资源管理器中看到 SRC 文件夹
  • 从主题获取 EditText 的“默认”颜色值

    我有一个Activity其中包含一个EditText关于 3 1 根据用户输入 我更改 EditText 中文本的颜色 红色表示错误 然后在文本正常时将其重置为黑色 其中一个问题涉及改变活动的整体主题 例如 将其从浅色主题更改为常规深色主题
  • Android GooglePlayServicesUtil.getErrorDialog() 不显示对话框

    我正在尝试检查是否可用Google Play 服务 APK在使用它之前 我有一个 软件包已过期的设备 日志显示 Google Play 服务已过时 需要 3225100 但找到 3136134 下面的代码将处理这种情况并显示一个对话框 提示
  • 使用 Firebase 数据填充 Android spinner

    我在填充时遇到一些问题propertyAddress从我的properties桌子到我的旋转器MaintenanceActivity 问题本身不在于代码 而在于可以使用 Firebase 控制台修改的数据库规则 目前 我的规则是这样的 ru
  • 带图标的 Android 选项菜单

    如何使用选项菜单显示图标 我尝试了以下代码 但我的选项菜单没有图像图标 我正在使用 android 版本 4 0 来开发应用程序 Java代码 public boolean onCreateOptionsMenu Menu menu sup
  • 序列化 ArrayList

    我正在尝试编写一个 Android 游戏 即使用户想要返回主菜单或者活动被系统终止 我也希望能够暂停游戏 onSaveInstanceState 似乎并没有给我很大的控制权来决定何时可以读回捆绑包 而且据我所知 捆绑包仅在短时间内有效 所以
  • Android NDK:断言失败:TARGET_PLATFORM 未定义

    使用 NDK r5b 时 当我使用以下命令在 jni 目录中进行构建时 NDK DIR ndk build 效果很好 但是当我切换到 r6b 只需以不同的方式设置 NDK DIR 并运行相同的命令时 我得到 usr local androi
  • 如何在导航抽屉上显示谷歌加个人资料图片?

    下面的代码来自github 用于在android应用程序中通过gmail登录 我做了一些修改以使用volley显示个人资料图片 它工作正常 我只想在导航抽屉中显示这些内容 个人资料图片 姓名和电子邮件 ID 我使用了 android stu
  • 如何将参数传递给Workmanager DoWork方法

    我想安排任务在 24 小时后从数据库中删除 public class WorkManager extends Worker public WorkManager NonNull Context context NonNull WorkerP
  • ANDROID:如何从所有窗口顶部的通知或长按搜索按钮启动弹出对话框?

    我已经搜索过 一切都是关于启动活动而不是对话框 我想要做的是在状态栏中显示通知 当用户按下它时 在用户单击通知之前正在查看的内容之上会弹出一个对话框 我不希望对话框显示在主要活动或最近的应用程序列表的顶部 另外 如何通过长按搜索按钮启动对话
  • 将 MapView 限制为屏幕的一半

    我试图让地图仅填充屏幕的上半部分 并在下半部分填充一些其他布局 现在我知道使用权重与表格布局相结合应该可以实现这一点 但是同一段 XML 代码可以完美地与 say 按钮配合使用 但不能与地图配合使用 截图在这里 https i stack
  • Android studio 3.0不生成签名的apk

    将 android studio 更新到版本 3 0 Windows 后 我无法生成签名的 APK 构建完成后 我收到消息 单击 查找 会将我带到 APP 文件夹 但找不到 APK 改变了什么 自Android Studio 3 0更新后
  • Android Fabric Crashlytics 崩溃,初始化时未找到资源

    我从 google play 控制台收到了这份报告 看起来 Fabric 在启动时崩溃了 因为某些用户出现了资源未找到的异常 java lang RuntimeException at android app ActivityThread
  • 最好使用的游戏/物理引擎?

    寻找用于移动游戏开发的游戏 物理引擎 iPhone 有Cocos2D http www cocos2d iphone org 我找到的安卓系统RokonAndroid http rokonandroid com 只是想知道是否还有其他人知道
  • 依赖于多个模块的 Gradle Android 单元测试

    我正在开发一个具有多个模块的项目 我们正在为应用程序编写 junit 测试用例 并且我们正在使用以下异常 开始试运行 java lang RuntimeException java lang ClassNotFoundException 下
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • ListPreferences 的异常

    这是我的第一个 Android 应用程序 在尝试使用 ListPreference 时遇到了异常 应用程序与首选项一起加载 但是当我触摸 ListPreference 条目时 应用程序 意外停止 设置 java public class S
  • 如何使用Android Studio录制Android屏幕?

    我已经在 Mac 上的 Applications 文件夹中安装了 Android Studio 我认为 sdk 位于包内容中 但现在我想使用 AShot jar 录制屏幕以获取应用程序的演示视频 我必须放弃SDK的路径 当我给出我认为正确的
  • Android动态功能模块,找不到资源

    当下载的功能模块发布到 Play 商店时 我在启动活动时遇到问题 它总是在下载模块活动中的 setContentView 上崩溃 java lang RuntimeException Unable to start activity Com
  • 如何从 Android 应用程序调用 REST API? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是 android 新手 也是编程新手 如何从 Android 应用程序调用 REST api GET POST 请求 请给我推荐一

随机推荐

  • 我的 SQL 出了什么问题? (查找“上一条”记录)

    我的 SQL 查询应该返回以前的记录 声明 Previous 意味着它具有不同的主键 idData 相同的 SSN Number 和较早的 Received Date 问题是 Received Date 可能相等 所以我必须寻找另一列 优先
  • SQL Server 中 INET_ATON 的等价物是什么

    正如问题所说 SQL Server 相当于什么INET ATON来自 mysql 我需要这个的原因是因为我从以下位置导入了 IP 数据库http ipinfodb com ip database php http ipinfodb com
  • 对静态变量 C++ 的未定义引用

    您好 我在以下代码中收到未定义的引用错误 class Helloworld public static int x void foo void Helloworld foo Helloworld x 10 我不想要一个static foo
  • Silverlight ClientHttp Web请求超时

    我有一个 silverlight 4 应用程序 使用 ClientHttp 堆栈来创建一个提供二进制流服务的 WebRequest 然后我从这个流中读取并做一些事情 但是 我有以下问题 服务器缓冲了它发送下来的数据 因此发送过程就像发送 暂
  • c#:如何从 List 中的特定索引读取

    我有一类人员和列表集合 因为列表包含人员类的所有值 例如 列表 ilist 有 2 个值 0 firstname lastname 1 名字2 姓氏2 现在 当我迭代列表时 我可以打印列表 但我想更改列表中某些部分的值 例如在索引 1 中
  • JSF 语言切换器和 ajax 更新

    这个问题是老问题的后续JSF 2 中的语言切换器实现 https stackoverflow com questions 10204001 language switcher implementation in jsf 尽管 PrimeFa
  • jqplot - 轴标签中的上标

    正如标题所说 如何将上标字体添加到 jqplot 图表中的轴标签 我尝试使用 Javascriptsup 函数以及轴标题的实际 html 标签 但没有成功 Basically I need to display units like m3
  • 如何清除 HTML5 画布中的圆弧或圆?

    我发现有一个clearRect 方法 但找不到任何可以清除圆弧 或整圆 的方法 有什么办法可以清除画布上的弧线吗 没有clearArc但是你可以使用复合操作来实现同样的事情 context globalCompositeOperation
  • 如何使用php将base64字符串转换为二进制数组

    我有一个 Base 64 编码的字符串 看起来像这样 cuVrcYvlqYze3OZ8Y5tSqQY205mcquu0GsHkgXe4bPg 我尝试过base64 decode 输出是 r kq c R 6 w l 我想我可能做错了什么 我
  • 在Python中找到公差范围内两个矩阵的交集?

    我正在寻找找到两个不同大小矩阵的交集的最有效方法 每个矩阵具有三个变量 列 和不同数量的观测值 行 例如矩阵A a np matrix 1 5 1003 2 4 1002 4 3 1008 8 1 2005 b np matrix 7 9
  • 如何在亚马逊网络服务中从 boto3 生成 url

    我在 s3 中有一个 Bucket 我正在尝试提取其中图像的 url 我正在使用 boto3 并且 boto3 似乎没有实现生成 url 方法 他们有一个核心方法 可以生成这样的 url import botocore session se
  • 如何在数据库中存储税金?

    我需要在我的项目中添加每个省 州的税费 我正在争论是否应该在省份和税收之间添加多对多关系 或者只是向每个省份添加tax1 name tax1 rate tax2 name tax2 rate 我不认为任何地方都有超过2个税吗 我还需要存储每
  • aurelia-fetch-client 动态创建请求标头

    我正在使用 aurelia fetch client 将一些数据发送到 web api 在注册方法中 headers Headers register this headers new Headers this headers append
  • Composer 安装“无法打开流”

    每当我运行安装程序 甚至手动安装 Composer 时 我都会收到一条错误 不允许我完成安装 这很烦人 在 Laragon 中 一个程序用于使用 Composer 及其包创建许多不同的项目 它不允许我使用 Laravel 因为 Compos
  • .NET Core 实体框架存储过程

    我正在尝试将 ASP NET 4 5 应用程序移植到 NET Core 但有一个我似乎无法解决的实际问题 我现有的应用程序执行存储过程 该存储过程返回具有多个数据表的数据集 实体框架可以自动将返回的字段映射到我的实体属性 但仅适用于数据集中
  • 为什么 Chrome 开发者工具会自动阻止请求?

    我正在尝试构建一个 PWA 渐进式 Web 应用程序 但 Chrome 开发工具控制台警告说它正在阻止我的 css 和图标文件 Request was blocked by DevTools https example com styles
  • 在 Laravel 中一起使用 React.js 和 Vue.js

    我真的很想知道 是否可以在 Laravel 中同时使用 React js 和 vue js 例如 使用 ReactJs 作为管理仪表板 使用 VueJs 作为客户端仪表板 我知道使用其中之一在技术上和逻辑上更好 你怎么认为 我们可以一起使用
  • 使用 ExecuteStreamCommand 的 Python 脚本

    在尽我所能找到以前的问题和与此问题相关的示例后 仍然没有找到我正在寻找的答案 我想我会自己提交一个问题 由于以下原因 ExecuteStreamCommand 对我来说似乎是完美的处理器 我能够执行任何 Python 脚本并避免使用 Jyt
  • 使用 TeamCity 和 Fakes Framework 进行构建和测试

    我们正在运行 TeamCity 8 1 4 构建服务器 计算机上安装了 VS2013 我最近介绍了依赖于 Microsoft Fakes Framework 的测试 因此 我必须添加一些对新 Fake 程序集和Microsoft Visua
  • SQLiteException:未知错误(代码0):本机无法创建新字节[]

    当尝试查询最多 30 个对象时 我收到此错误 每个对象都有字段字节 其权重为 100x100 ARGB 8888 位图数据 39kb 我使用的是 OrmLite 4 45 版本 在 Samsung GT n8000 平板电脑上 最大堆大小