android 行 64,android - 无法从具有0行,64列的CursorWindow读取第0行第0列 - 堆栈内存溢出...

博主在Note8设备上遇到一个错误,即无法从具有0行,64列的CursorWindow读取数据。问题出现在一个持续运行的同步方法中,该方法每10秒检查一次新提交并同步到服务器。错误似乎只在特定设备上发生,且与数据库版本重复输出有关。博主考虑问题可能与CursorWindow大小限制有关,并提出了限制游标检索列数的解决方案。更新提到,游标窗口可能已满,建议在单独游标中处理大字段。
摘要由CSDN通过智能技术生成

我有时在我的logcat中得到这个错误。

无法从具有0行,64列的CursorWindow读取第0行第0列。

首先,有点背景故事。 我有一个在我们组织中的许多设备上运行的应用程序。 它主要运行在大约20个三星Note 8设备,2个三星Note 10.1设备和其他几个。 到目前为止,问题仅发生在Note 8设备中的2个。 在所有其他设备上它似乎工作得很好。

应用程序的工作原理是用户使用该应用程序收集信息,文本,照片,签名等......然后将所有这些内容作为提交表中的一行存储/插入到SQLite数据库中。 提交表有64列,以满足每个收集的字段。 有一个始终在运行的同步方法(它是在可运行线程内执行的AsyncTask ,所以即使应用程序关闭,它仍然会在后台同步数据,除非你从android任务管理器中滑动关闭它),将数据同步到远程服务器,如果需要同步则每10秒检查一次,例如,如果插入了新的提交,它将开始同步该提交。 提交完成后,与服务器同步并收到成功响应,然后将其从设备的数据库中删除。 到目前为止它已经工作得很好,数千个提交已成功同步等等。但是,我不时地从一两个特定的Note 8平板电脑中得到这一个错误,可以重现这个问题。 我已经多次尝试重新创建错误,但是当我测试它并且我已经尝试了各种类型的场景来测试它时它总是有效。

我的代码是数千行,所以我会尽量保持它的相关性。 首先,这是runnable的相关代码:

public Runnable myRunnable = new Runnable()

{

@Override

public void run()

{

count ++;

if(count >= 10)

{

android.util.Log.w(" SYNC ", "---------------");

android.util.Log.w(" SYNC ", "Checking if sync method is busy");

if(!syncBusy)

{

android.util.Log.w(" SYNC ", "Sync method OPEN");

doSync();//This will start doing sync.

count = 0;

}

else

{

android.util.Log.w(" SYNC ", "Sync method BUSY, will try again in 10 seconds");

android.util.Log.w(" SYNC ", "---------------");

}

}

if(count == 1 && !syncBusy)

{

checkSubmissionsLefttoSync();

}

mHandler.postDelayed(myRunnable, 1000);

}

};

然后,doSync()方法是我上传的地方,也是我收到错误的地方。 它长达数千行,所以我真的不想在这里发布代码。 我能说的是,除了产生上述错误的一两个例外情况外,它对所有设备都有100%的效果。

另外,我将在sync方法中发布实际遍历数据库的部分:

databaseHelper = new Handler_Database(this);

Cursor cursor2 = databaseHelper.getAllUnsyncedSubmissions();

if(cursor2.getCount() > 0)

{

if(cursor2.moveToFirst())

{

do

{

try

{

//doing lookups here and populating sync arrays

}

catch (IllegalStateException e)

{

//Do Nothing

}

catch (NullPointerException e)

{

//Do Nothing

}

}

while(cursor2.moveToNext());

}

else

{

}

}

else

{

}

cursor2.close();

databaseHelper.close();

我注意到了别的东西,我不确定这是不是一个问题,但是,当我运行应用程序时,logcat输出以下几行约6或7次:

12:48:11.115 7416#7416 DEBUG SQLiteOpenHelper DB版本:60

当应用程序启动时,我有自己的警告消息,而这些消息只显示一次。 但是,db版本和其他信息正在多次写入logcat。 这是一个问题吗? 这是否意味着我的数据库存在某种错误,它会创建多个实例?

所有应用程序都使用来自Playstore的已签名的apk进行更新。 我的数据库onUpgrade方法如下所示:

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

{

// Drop older table if existed

db.execSQL("DROP TABLE IF EXISTS " + TABLE_SUBMISSIONS);

// Create tables again

onCreate(db);

}

这适用于所有其他平板电脑和设备。 它们都从Playstore自动更新,并继续按预期工作。 但是,为什么logcat会多次输出这些行?

这可能是问题的一部分,为什么我收到这篇文章开头提到的错误?

任何可能的见解都会很高兴。 我已经把头发拉了几个星期,在我的代码中找不到任何错误。

更新1:

我刚看到这个警告:

08:30:58.710 16745#16745 WARN CursorWindow窗口已满:请求分配307333字节,可用空间249426字节,窗口大小2097152字节

我猜这可能是我问题的根源。 关于如何有效解决这个问题的任何想法?

更新2:

我认为解决方案可能是限制我用光标检索的列。 例如,所有小文本值/列。 然后,为我知道占用太多空间的每个列创建一个新查询。 你认为这是一个解决方案吗? 任何人 ?

更新3:

这可能有用,我想我会在最初的一个游标被回收之后在单独的游标中做大字段。 像这样的东西(我刚写了一些伪代码):

Cursor c = db.rawQuery("SELECT Column1, Column2 .... FROM table " + ... , ...);

解:

### 回答1: aspose-words-21.4.0-android.viajava.jar是一个用于Android平台的Aspose Words库的Java ARchive (JAR)文件。Aspose Words是一个强大的文件处理库,专门用于创建、编辑和操作Microsoft Word文档。 通过使用aspose-words-21.4.0-android.viajava.jar,开发人员可以在Android应用程序中轻松地生成、修改和操纵Word文档。该库提供了许多功能,包括插入和删除文本、设置字体样式和颜色、添加和删除段落、设置页边距和页面布局等。 此外,aspose-words-21.4.0-android.viajava.jar还提供了对Word文档的高级操作的支持,例如插入和删除表格、修改表格样式、添加和删除图片、插入和编辑超链接等。 使用aspose-words-21.4.0-android.viajava.jar,开发人员可以轻松地实现许多Word文档处理的任务,包括生成报告、生成合同、生成信函、创建和编辑简历等。 总之,aspose-words-21.4.0-android.viajava.jar是一个功能强大的库,可以使开发人员在Android应用程序中处理和操作Word文档变得更加简单和高效。无论是创建新的文档,还是对现有文档进编辑,都可以通过该库轻松实现。 ### 回答2: aspose-words-21.4.0-android.viajava.jar 是一个供Android开发者使用的Aspose.Words库的Java包。Aspose.Words是一个强大的Java API,用于处理和操作Word文档。它提供了各种功能,使开发者能够在Android应用程序中创建、读取、编辑和转换Word文档。 通过使用aspose-words-21.4.0-android.viajava.jar,开发者可以轻松地在Android应用程序中实现对Word文档的各种操作。该库提供了丰富的API,可以处理文本、图像、表格、样式、布局等各个方面的内容。开发者可以使用这些API来插入、删除、替换文本、添加和修改图像、创建和格式化表格等。除此之外,还可以应用各种格式化样式、设置页眉页脚、分节和分页,以及控制文档的布局和排版。 aspose-words-21.4.0-android.viajava.jar 还支持将Word文档转换为其他格式,如PDF、HTML、EPUB等。这意味着开发者可以方便地将Android应用程序中生成或编辑的Word文档转换为其他格式进分享或显示。 总之,aspose-words-21.4.0-android.viajava.jar 是一个Android平台上功能强大且易于使用的Aspose.Words Java库,使开发者能够在其应用程序中实现各种Word文档操作和转换。无论是创建报告、生成文档、编辑文本还是转换格式,这个库都能满足开发者的需求,并提供了一个便捷的解决方案。 ### 回答3: aspose-words-21.4.0-android.viajava.jar是一个Aspose Words的Android版本的Java库文件。Aspose Words是一个强大的文档处理库,可以用于在Java应用程序中创建、读取、修改和转换多种类型的文档,例如Microsoft Word文档、OpenOffice文档、PDF文档等。 通过aspose-words-21.4.0-android.viajava.jar,开发人员可以在Android平台上使用Aspose Words提供的功能,轻松地进文档的操作。无论是创建新文档、编辑现有文档,还是提取和设置文档的内容、样式和格式,都可以通过这个Jar文件来实现。 aspose-words-21.4.0-android.viajava.jar库文件提供了一系的API和类,用于操作文档。开发者可以使用这些API和类来进文本操作、插入图片、设置页眉页脚、添加表格、应用样式和格式等。通过与Android平台的集成,可以创建各种各样的文档应用程序,例如报告生成、合同生成、操作简历等。 此外,aspose-words-21.4.0-android.viajava.jar还支持文档的转换功能。开发人员可以将一个文档从一种格式转换为另一种格式,如将Word文档转换为PDF、HTML、EPUB等。这为用户提供了更灵活和多样的文档处理方式。 总之,aspose-words-21.4.0-android.viajava.jar是一个提供了丰富功能的Aspose Words库文件,用于在Android平台上进文档操作和转换。它为开发者提供了方便、快捷和高效的方法来创建、编辑和转换多种类型的文档。无论是个人用户还是企业用户,都可以通过这个Jar文件轻松地实现各种文档处理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值